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