全称:Bautiful Soup,此模块是第三方库,因此需要单独下载
安装方法:
pip install bs4
由于 BS4 解析页面时需要依赖文档解析器,所以还需要安装 lxml 作为解析库:
pip install lxml
另外,在我们使用bs4这个模块的时候,我们需要创造一个BeautifulSoup对象,该对象常用解析器有:
- html.parser
- lxml
- xml
- html5lib
BeautifulSoup默认支持Python的标准HTML解析库,但是它也支持一些第三方的解析库
解析器 | 使用方法 | 优势 | 劣势 |
---|---|---|---|
python标准库 | BeautifulSoup(markup,“html.parser”) | python内置标准库,执行速度适中,文档容错能力强 | python2.7.3 or 3.2.2以前的版本中文档容错能力差 |
lxml HTML 解析器 | BeautifulSoup(markup,“lxml”) | 速度快,文档容错能力强 | 需要C语言库 |
lxml xml 解析器 | BeautifulSoup(markup,“xml”); BeautifulSoup(“lxml”,“xml”) | 速度快,唯一支持xml的解析器 | 需要C语言库 |
html5lib | BeautifulSoup(markup,“html5lib”) | 最好的容错性 | 速度慢 |
BeautifulSoup
● 用法示例:
BeautifulSoup(url.text,'html.parser') # "url.text"为被解析内容,"html.parser"为解析器
其中,第一个参数为需要解析的内容,第二个参数为需要使用的解析器
查找节点
有两种方式查找,一个是find,一个是find_all
● 书写格式 find( “需要查找的标签名” , attrs={属性:属性名}) 用法示例:
# 查找单个标签
html.find("div",attrs={
"class":"v7W49e"})
html.find_all("div",attrs={
"class":"v7W49e"})
# 查找多个标签
html.find_all([a,h3])
# 查找ul标签下的所有a标签
html.find("ul",attrs={
"class":"v7W49e"}).find_all('a')
获取文本
-
bs4中获取标签中的文本常用有两种方法:
方法 解释 a.text get_text()
是Beautiful Soup对象的方法,用于获取指定标签及其子标签中的所有文本内容,并将它们合并成一个字符串。如果一个标签内包含了多个子标签,get_text()
会将它们的文本内容合并到一个字符串中,不会保留子标签之间的任何分隔符。get_text()
的调用方式为p.get_text()
,其中p
是Beautiful Soup对象找到的特定标签a.get_text() text
是Beautiful Soup标签对象的属性,用于获取该标签中直接包含的文本内容,不包括子标签内的文本内容。如果一个标签内包含了多个子标签,text
只会返回该标签直接包含的文本内容,不包括子标签的文本内容。text
的调用方式为p.text
,其中p
是Beautiful Soup对象找到的特定标签。 -
示例:
<p> 这是一个段落。 <strong>粗体文本</strong> <em>斜体文本</em> </p>
使用
p.get_text()
会得到合并后的文本内容:这是一个段落。粗体文本斜体文本
p.text
只会得到该段落标签直接包含的文本内容:这是一个段落。
子标签内的文本内容并不包含在
p.text
中
获取属性值:
BeautifulSoup4 (bs4) 中,获取标签的属性值可以使用以下两种方法:
- 使用
tag.get(attribute)
方法:该方法可以获取标签的指定属性值。如果属性不存在,则返回None
。 - 使用
tag['attribute']
或者tag.attribute
:直接通过方括号或点号来获取标签的属性值。如果属性不存在,使用方括号方式会报错,而使用点号方式会返回None
。
- 示例:
<a class="link" href="xxx.xxx.xxx" target="_blank">Example Website</a>
使用python提取a标签中的herf
属性
from bs4 import BeautifulSoup
data = '<a class="link" href="xxx.xxx.xxx" target="_blank">Example Website</a>'
# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(data, 'html.parser')
# 使用 get 方法获取属性值
tag = soup.find('a')
value = tag.get('href')
print(value)
# 使用方括号获取属性值
brackets = tag['href']
print(brackets)
# 使用点号获取属性值
dot = tag.href
print(dot)
注意:如果标签不存在指定的属性,使用方括号方式会报错,而使用
get()
方法或点号方式会返回None
。因此,在使用方括号获取属性值之前,最好确保属性存在,或者使用get()
方法来安全地获取属性值。