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

相关推荐
水w7 天前
【Python爬虫】详细入门指南
开发语言·爬虫·python·scrapy·beautifulsoup
水w10 天前
【Python爬虫】简单案例介绍3
开发语言·爬虫·python·scrapy·beautifulsoup
水w10 天前
【Python爬虫】简单介绍
开发语言·爬虫·python·beautifulsoup
水w11 天前
【Python爬虫】简单介绍2
开发语言·爬虫·python·beautifulsoup
Code_流苏17 天前
Python星球日记 - 第16天:爬虫基础(仅学习使用)
beautifulsoup·python爬虫·requests库·数据提取·html解析
唐叔在学习19 天前
【Python爬虫高级技巧】BeautifulSoup高级教程:数据抓取、性能调优、反爬策略,全方位提升爬虫技能!
python·beautifulsoup·html解析·爬虫进阶·反爬策略
Test-Sunny1 个月前
基于python爬虫:requests+BeautifulSoup+MySQL/MongoDB(或:CSV、JSON等格式的文件)+...
爬虫·python·beautifulsoup
Cccc吃吃吃1 个月前
python中深浅拷贝以及可变对象和不可变对象
开发语言·jvm·python·beautifulsoup·numpy·pyqt·fastapi
mosquito_lover11 个月前
详解如何通过Python的BeautifulSoup爬虫+NLP标签提取+Dijkstra规划路径和KMeans聚类分析帮助用户规划旅行路线
爬虫·python·自然语言处理·beautifulsoup·kmeans