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')
查找的结果如下。

\The Dormouse's story\

( 2 )若值为正则表达式,则会查找名称符合正则表达式模式的所有节点。例如,使用 soup
对象调用 find_all() 方法查找 id 属性值中含有 link1 关键字的所有节点,代码如下。
soup.find_all(id=re.compile("link1"))
查找的结果如下。

\Elsie\

( 3 )若值为列表,则会查找名称与列表中任一元素相同的所有节点。例如,使用 soup 对
象调用 find_all() 方法查找所有名称为 title 和 a 的节点,代码如下。
soup.find_all(["title", "a"])
查找的结果如下。

\The Dormouse's story\, \Elsie\, \Lacie\, \ Tillie\

2.参数 attrs

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

\Elsie\

3.参数 recursive

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

\\The Dormouse's story\\

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)
查找的结果如下。

\Elsie\

6.参数**kwargs

参数 **kwargs 支持以关键字形式传递的任意一个参数。在节点树中查找节点时,会将关
键字参数的名称作为节点的属性名称,值作为属性值。例如,使用 soup 对象调用 find_all() 方
法查找属性名称为 id 、值为 link3 的节点,代码如下。
soup.find_all(id='link3')
查找的结果如下。

\Tillie\

当我们要查找的节点名称为 class 时,由于 class 属于 Python 中的关键字,所以我们需要
在 class 的后面加上一条下画线。示例代码如下。
soup.find_all("p", class_="title")
查找的结果如下。

\

\The Dormouse's story\\

相关推荐
淮北4949 天前
ubuntu22.04将mp4转换成gif
python·scrapy·flask·beautifulsoup·pyqt·matplotlib
NiKick11 天前
网页数据抓取:融合BeautifulSoup和Scrapy的高级爬虫技术
爬虫·scrapy·beautifulsoup
万粉变现经纪人20 天前
如何解决 import aiohttp ModuleNotFoundError: No module named ‘aiohttp’
python·scrapy·beautifulsoup·aigc·pillow·pip·httpx
小白学大数据23 天前
Python requests + BeautifulSoup 爬取豆瓣电影图片
开发语言·python·beautifulsoup
luom010225 天前
诊疗室技术文章大纲
python·beautifulsoup·tornado·dash
万粉变现经纪人1 个月前
如何解决 pip install pillow-simd 报错 需要 AVX2/特定编译器 支持 问题
python·scrapy·beautifulsoup·aigc·pandas·pillow·pip
小邓睡不饱耶1 个月前
实战教程:基于Selenium+BeautifulSoup爬取易车网新能源汽车销量数据
selenium·测试工具·beautifulsoup
普通网友3 个月前
掌握 requests、BeautifulSoup 等库的网络爬虫基础,或使用 pandas 进行简单数据分析
爬虫·beautifulsoup·pandas
少云清3 个月前
【金融项目实战】9_接口测试 _BeautifulSoup基本使用
beautifulsoup·接口测试·金融项目实战
weixin_462446233 个月前
使用 Python 批量在 HTML 文件中插入自定义 div 元素
python·beautifulsoup·自动化脚本·html 批量处理