Python爬虫必知必会:BeautifulSoup之find_all参数速览

  • Post author:
  • Post category:python


find_all() 方法

搜索当前tag的所有tag子节点

,并判断是否符合过滤器的条件:

find_all( name , attrs/class_ , recursive , string , **kwargs )

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

[2] 做梦当财神.BeautifulSoup中的find/find_all[EB/OL].博客园,2017-11-20. https://www.cnblogs.com/keye/p/7868059.html



版权声明:本文为weixin_45671758原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。