BeautifulSoup 类通过查找方法选取节点

BeautifulSoup 类提供了一些基于 HTML 或 XML 节点树选取节点的方法,其中比较主流
的两个方法是 find() 方法和 find_all() 方法。 find() 方法用于查找符合条件的第一个节点; find_all()
方法用于查找所有符合条件的节点,并以列表的形式返回。
由于 find() 方法和 find_all() 方法的参数相同,所以我们这里以 find_all() 方法为例进行介绍。
find_all() 方法的声明如下。

find_all(self, name=None, attrs={}, recursive=True, text=None,
limit=None, **kwargs)
上述方法包含了多个参数,每个参数接收值的类型不同,查找到的结果也会有所不同。
接下来,分别对上述方法中的每个参数进行介绍。
❤❤ 喜欢的就点个关注哦--------帅哥美女们! ❤❤

1.参数 name

参数 name 表示待查找的节点名称,它支持字符串、正则表达式、列表 3 种类型的取值。
( 1 )若值为字符串,则会查找名称与字符串完全相同的所有节点。例如,使用 4.4.2 节创
建的 soup 对象调用 find_all() 方法查找名称为 title 的节点,代码如下。
soup.find_all('title')
查找的结果如下。
[<title>The Dormouse's story</title>]
( 2 )若值为正则表达式,则会查找名称符合正则表达式模式的所有节点。例如,使用 soup
对象调用 find_all() 方法查找 id 属性值中含有 link1 关键字的所有节点,代码如下。
soup.find_all(id=re.compile("link1"))
查找的结果如下。
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
( 3 )若值为列表,则会查找名称与列表中任一元素相同的所有节点。例如,使用 soup 对
象调用 find_all() 方法查找所有名称为 title 和 a 的节点,代码如下。
soup.find_all(["title", "a"])
查找的结果如下。

[<title>The Dormouse's story</title>, <a class="sister" href="http://example.
com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie"
id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">
Tillie</a>]

2.参数 attrs

参数 attrs 表示待查找的属性节点,它接收一个字典,字典中的键为属性名称,值为该属
性对应的值。例如,使用 soup 对象调用 find_all() 方法查找属性名称为 id 、值为 link1 的节点,
代码如下。
soup.find_all(attrs={'id':'link1'})
查找的结果如下。

[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]

3.参数 recursive

参数 recursive 表示是否对当前节点的所有子孙节点进行查找,其默认值为 True 。如果只
需要对当前节点的直接子节点进行查找,则可以将参数 recursive 的值设为 False 。例如,使用
soup 对象调用 find_all() 方法查找直接子节点 head ,代码如下。
soup.html.find_all("head", recursive=False)
查找的结果如下。

[<head><title>The Dormouse's story</title></head>]

4.参数 text

参数 text 表示待查找的文本节点,它也支持字符串、正则表达式、列表 3 种类型的取值,
具有与 name 参数相同的用法。例如,使用 soup 对象调用 find_all() 方法查找所有文本为 Elsie
的节点,代码如下。
soup.find_all(text="Elsie")
查找的结果如下。

['Elsie']

5.参数 limit

参数 limit 表示待查找的节点数量。当在节点树中查找节点时,如果节点树非常大,那么
查找的速度会非常慢。此时若不需要选取所有符合要求的结果,可以给参数 limit 指定值以限
制结果的数量。一旦数量超过了参数 limit 的值,就会停止查找。参数 limit 与 SQL 语句中的
limit 子句具有类似的功能,都可以限制查找结果的最大数量。
例如,使用 soup 对象调用 find_all() 方法查找至多 1 个节点 a ,代码如下。
soup.find_all("a", limit=1)
查找的结果如下。

[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]

6.参数**kwargs

参数 **kwargs 支持以关键字形式传递的任意一个参数。在节点树中查找节点时,会将关
键字参数的名称作为节点的属性名称,值作为属性值。例如,使用 soup 对象调用 find_all() 方
法查找属性名称为 id 、值为 link3 的节点,代码如下。
soup.find_all(id='link3')
查找的结果如下。
[<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
当我们要查找的节点名称为 class 时,由于 class 属于 Python 中的关键字,所以我们需要
在 class 的后面加上一条下画线。示例代码如下。
soup.find_all("p", class_="title")
查找的结果如下。

[<p class="title"><b>The Dormouse's story</b></p>]

相关推荐
移民找老国5 天前
加拿大:一场生活与梦想的邂逅
beautifulsoup·intellij-idea·numpy·生活·fastapi·visual studio code·myeclipse
亿牛云爬虫专家15 天前
使用Python和BeautifulSoup轻松抓取表格数据
开发语言·python·数据分析·beautifulsoup·爬虫代理·表格·代理ip
雅雅酱o15 天前
简单理解爬虫的概念
爬虫·beautifulsoup·交互
mjiuwwed_mhuy18 天前
WEP前端:深入解析其含义、特性及在Web开发中的应用
前端·python·beautifulsoup·numpy
mjiuwwed_mhuy21 天前
web前端厦门招聘:探索行业趋势、技能需求与职业发展机遇
javascript·beautifulsoup
熊IT22 天前
使用 beautifulsoup 结合代理IP解析网页的Python爬虫方法
python·tcp/ip·beautifulsoup
java250822 天前
笔记-python 中BeautifulSoup入门
笔记·python·beautifulsoup
asdgftv_niiy25 天前
Web前端专科实习:技能提升、实践挑战与职业展望
前端·javascript·beautifulsoup
asdgftv_niiy1 个月前
Web前端浪漫源码:编织梦想与爱的交织乐章
前端·javascript·beautifulsoup