Beautiful Soup 是Python的一个HTML或XML的解析库。
他提供一个简单的、Python式的函数来处理导航、搜索、修改分析数等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup 自动将输入文档转化为Unicode编码,输出文档转化为utf-8编码。不需要考虑编码方式,除非文档没有指定一个编码方式,这时仅仅需要说明一下原始的编码方式就可以了。
Beautiful Soup 安装pip3 install beautifulsoup4
导入 bs4 库
from bs4 import BeautifulSoup
Beautiful Soup 支持 Python 标准库中的 HTML 解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python 默认的解析器,lxml 解析器更加强大,速度更快,推荐安装。
安装lxml解析器
pip3 install lxml
安装html5lib解析器
pip3 install html5lib
解析器使用方法
测试用例:
h1 {color:red} p {color:blue}hello
- 使用Python 标准库的HTML解析器
soup = BeautifulSoup(doc, “html.parser”)
输出结果:
h1 {color:red} p {color:blue}hello
- 使用lxml HTML解析器
soup = BeautifulSoup(doc, “lxml”)
输出结果:
h1 {color:red} p {color:blue}hello
- 使用lxml XML解析器
soup = BeautifulSoup(doc, “lxml”)
输出结果:
h1 {color:red} p {color:blue}
- 使用html5lib HTML解析器
soup = BeautifulSoup(doc, “html5lib”)
输出结果:
h1 {color:red} p {color:blue}hello
常用方法
# 按照标准缩进格式输出
print(soup.prettify())
# 将HTML文档中的所有标签清除,返回一个只包含文字的字符串
print(soup.get_text())
# 或者
print(soup.text)
# 获取title标签
tag = soup.title
# 获取body标签
tag = soup.body
# 获取tag类型
print(type(tag))
# 获取标签名称
print(tag.name)
# 获取标签属性
print(tag.attrs)
# 单独获取某个属性
print(tag.attrs["lang"])
# 或者
print(tag["lang"])
# 获取标签文字
print(tag.string)
# 返回第一个div元素
divtag = soup.find("div")
# 返回第一个class为article的div元素
divtag = soup.find('div', attrs={'class', 'article'})
# 返回第一个id为article的div元素
divtag = soup.find('div', id='article')
# 搜索当前tag的所有tag子节点,并判断是否符合给定的条件
# 返回结果是一个数组,可以包含多个元素
divlst = soup.find_all('div')