Beautiful Soup 爬虫

转自
Beautiful Soup 4.2.0 文档¶

bs4库的简单应用

request.py
使用sublimetext会出现一些编码问题,先用pycharm吧

使用lxml解析器来解释网页

bs4 库首先将传入的字符串或文件句柄转换为 Unicode的类型,这样,我们在抓取中文信息的时候,就不会有很麻烦的编码问题了。当然,有一些生僻的编码 如:‘big5’,就需要我们手动设置编码:
soup = BeautifulSoup(markup, from_encoding=”编码方式”)

#2019-10-11 21:00:57
import requests
#导入bs4模块
from bs4 import BeautifulSoup
html = requests.get("http://www.baidu.com")
#做一个美味汤
soup = BeautifulSoup(html.text, 'lxml')
#输出结果
print(soup.prettify())

对象的种类

bs4 库将复杂的html文档转化为一个复杂的树形结构,每个节点都是Python对象 ,所有对象可以分为以下四个类型:Tag , NavigableString , BeautifulSoup , Comment
我们来逐一解释:

  • Tag: 和html中的Tag基本没有区别,可以简单上手使用
  • NavigableString: 被包裹在tag内的字符串
  • BeautifulSoup: 表示一个文档的全部内容,大部分的时候可以吧他看做一个tag对象,支持遍历文档树和搜索文档树方法。
  • Comment:这是一个特殊的NavigableSting对象,在出现在html文档中时,会以特殊的格式输出,比如注释类型。

几个结构化数据的方式

#找到文档的title
print(soup.title)

#title的name值
print(soup.title.name)

#title中的字符串String
print(soup.title.string)

#title的父亲节点的name属性
print(soup.title.parent.name)

#文档的第一个找到的段落
print(soup.p)

#找到的p的class属性值
print(soup.p['class'])

#找到a标签
print(soup.a)

#找到所有的a标签
print(soup.find_all('a'))

#找到id值等于3的标签
print(soup.find(id="link3"))

#找到所有class值为3的标签
print(soup.find_all('li', attrs={'class': '3'}))
print(soup.find_all('ul', class_='3'))

#获取所有文字内容
print(soup.get_text())

#将tag的子节点以列表方式输出
print(soup.head.contents)

#通过tag的 .children生成器,可以对tag的子节点进行循环
for child in title_tag.children:
    print(child)

#找到tag下的所有的文本内容
#1.如果该tag只有一个子节点(NavigableString类型):直接使用tag.string就能找到。
#2.如果tag有很多个子、孙节点,并且每个节点里都string:我们可以用迭代的方式将其全部找出:
for string in soup.strings:
    print(repr(string))

   转载规则


《Beautiful Soup 爬虫》 刘坤胤 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录