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>]

相关推荐
chusheng184024 天前
使用 Python 的 BeautifulSoup 与 Flask/Flask-RESTful 集成进行数据爬取和 API 构建
python·flask·beautifulsoup
yoona10201 个月前
Python网络爬虫从入门到实战
开发语言·python·区块链·beautifulsoup·php·pip·requests
Algorithm15761 个月前
多线程股吧(东方财富)用户信息爬取
python·beautifulsoup
傻啦嘿哟2 个月前
动态内容加载处理:使用Selenium与BeautifulSoup的深入解析
selenium·测试工具·beautifulsoup
gochanTao2 个月前
Python中 BeautifulSoup和Selenium 定位元素和获取元素值的方法
python·selenium·beautifulsoup
Kentos(acoustic ver.)3 个月前
python数据分析——网络爬虫和API
css·爬虫·python·数据分析·html·json·beautifulsoup
天涯幺妹3 个月前
Python网络爬虫模拟登录与验证解析
爬虫·python·scrapy·网络安全·pycharm·beautifulsoup·pygame
云霄IT3 个月前
python库之BeautifulSoup使用教程
前端·python·beautifulsoup
小白学大数据4 个月前
如何优化 Selenium 和 BeautifulSoup 的集成以提高数据抓取的效率?
爬虫·python·selenium·测试工具·beautifulsoup
花花花14 个月前
Python网络爬虫详解:实战豆瓣电影信息采集
开发语言·爬虫·python·scrapy·beautifulsoup