Python知识分享网 - 专业的Python学习网站 学Python,上Python222
Python BeautifulSoup之find_all方法使用详解
匿名网友发布于:2023-07-08 12:12:06
(侵权举报)

name:标签名搜索
attrs/class_:属性/类名搜索
recursive:限定直接子节点
string:文档字符串搜索

 

1. 标签名搜索——name

name 参数可以查找所有标签名为 name 的tag,字符串对象会被自动忽略掉.

 

#简单的用法如下
soup.find_all("title")

#支持多标签搜索
soup.find_all(name=['div','p'])

 

重申: 搜索 name 参数的值可以使任一类型的 过滤器 ,字符窜,正则表达式,列表,方法或是 True .

 

2. 基于标签的属性查找——attrs/class_/id/title/…
通过标签属性查找的方式适用大多数标签属性,包括id,style,title,但有 “-”,Class标签属性例外。详解如下:

2.1 通用方式属性搜索——attrs
比如html5标签中的data-custom属性,如果我们这样
 

soup.find(data-custom="custom")#错误写法

 

那么则会报错。原因是在python中变量不能含有"-"这个字符,而我们传递的data-custom有这个字符。

解决办法是在attrs属性用字典进行传递参数

 

soup.find(attrs={'data-custom':'custom'})

 

2.2 CSS类名搜索——class_

通过 class_ 参数搜索有指定CSS类名的tag(可简写):

 

soup.find_all("a", "sister") #class_="sister"
#‘class’在python中是保留字,所以使用时需加‘下划线_’

 

tag的 class 属性是 多值属性 .按照CSS类名搜索tag时,可以分别搜索tag中的每个CSS类名:

 

css_soup = BeautifulSoup('<p class="body strikeout"></p>')
css_soup.find_all("p", class_="strikeout")
# [<p class="body strikeout"></p>]

css_soup.find_all("p", class_="body")
# [<p class="body strikeout"></p>]

 

搜索 class 属性时也可以通过CSS值完全匹配:

 

css_soup.find_all("p", class_="body strikeout")
# [<p class="body strikeout"></p>]

 

3. 文档字符串内容搜索——string

通过 string 参数可以搜搜文档中的字符串内容.与 name 参数的可选值一样, string 参数接受 字符串 , 正则表达式 , 列表, True . 看例子:

 

soup.find_all(string=["Tillie", "Elsie", "Lacie"])
# [u'Elsie', u'Lacie', u'Tillie']

soup.find_all(string=re.compile("Dormouse"))
[u"The Dormouse's story", u"The Dormouse's story"]

 

string 还可以与其它参数混合使用来过滤tag.
下面代码用来搜索内容里面包含“Elsie”的标签:

 

soup.find_all("a", string="Elsie")
# [<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>]

 

4. 限定直接子节点——recursive
调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数 recursive=False .

附:简写小技巧
BeautifulSoup 对象和 tag 对象可以被当作一个方法来使用,这个方法的执行结果与调用这个对象的 find_all() 方法相同,下面两行代码是等价的:
 

soup.find_all("a")
soup("a")

 

参考文献

[1] delong(翻译).Beautiful Soup 4.4.0 文档[EB/OL].BeautifulSoup官方文档. https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#id27

 

转载自:https://blog.csdn.net/weixin_45671758/article/details/111595048