概述
上接:
Python3网络爬虫教程13——BeautifulSoup4基本使用及遍历文档树
https://blog.csdn.net/u011318077/article/details/86633392
5.3. 搜索文档树
5.3.1. 过滤器
-
find_all()
-
find_all() 方法将返回文档中符合条件的所有tag
-
过滤器
-
过滤器可以被用在tag的name中,节点的属性中,字符串中或他们的混合中
-
传入字符串
- soup.find_all(‘b’)
-
传入正则表达式
- 找出所有以b开头的标签
- soup.find_all(re.compile(r"^b"))
- 找出所有名字中包含”t”的标签
- soup.find_all(re.compile(r"t"))
-
参考实例67_18
-
传入列表参数,
-
Beautiful Soup会将与列表中任一元素匹配的内容返回.
-
返回值也是一个列表
-
soup.find_all([“a”, “b”])
-
传入True,True 可以匹配任何值,
-
下面代码查找到所有的tag,但是不会返回字符串节点
-
oup.find_all(True)
-
参考实例67_19
-
-
方法
- 没有合适的过滤器,可以定义一个方法
- 方法只接受一个元素参数,如果这个方法返回 True
- 表示当前元素匹配并且被找到,如果不是则反回 False
- 参考实例67_20
5.3.2. find_all()的参数使用
- find_all()的参数使用
- find_all( name , attrs , recursive , string , **kwargs )
-
name 参数
-
可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉
-
keyword 参数
-
如果一个指定名字的参数不是搜索内置的参数名,
-
搜索时会把该参数当作指定名字tag的属性来搜索,如果包含一个名字为 id 的参数,
-
Beautiful Soup会搜索每个tag的”id”属性
-
有些tag属性在搜索不能使用,比如HTML5中的 data-* 属性
-
但是可以通过 find_all() 方法的 attrs 参数
-
定义一个字典参数来搜索包含特殊属性的tag
-
参考实例67_21
-
5.3.3. CSS搜索
-
标识CSS类名的关键字 class 在Python中是保留字,
- 使用 class 做参数会导致语法错误.从Beautiful Soup的4.1.1版本开始,
- 可以通过 class_ 参数搜索有指定CSS类名的tag
-
class_ 参数
- 同样接受不同类型的 过滤器 ,字符串,正则表达式,方法或 True
- 参考实例67_22
-
string 参数
- 搜文档中的字符串内容.与 name 参数的可选值一样
- soup.find_all(string=“Elsie”)
- 和tag标签混合使用
- soup.find_all(“a”, string=“Elsie”)
-
补充
-
find_all() 几乎是Beautiful Soup中最常用的搜索方法
-
语法可以简写,以下写法等价
soup.find_all("a") soup("a") soup.title.find_all(string=True) soup.title(string=True)
5.3.4. find()
-
find( name , attrs , recursive , string , **kwargs )
-
比如文档中只有一个标签,那么使用 find_all() 方法
-
来查找标签就不太合适,
-
使用 find_all 方法并设置 limit=1 参数不如直接使用 find() 方法
-
下面代码等价
soup.find_all('title', limit=1) [<title>The Dormouse's story</title>] soup.find('title') <title>The Dormouse's story</title> - 唯一的区别是 find_all() 方法的返回结果是值包含一个元素的列表, - 而 find() 方法直接返回结果
-
find_parents( name , attrs , recursive , string , **kwargs )
-
find_parent( name , attrs , recursive , string , **kwargs )
-
find_all() 和 find() 只搜索当前节点的所有子节点,孙子节点等.
-
find_parents() 和 find_parent() 用来搜索当前节点的父辈节点,
-
find_all_next() 和 find_next()
-
find_all_previous() 和 find_previous()
5.4. 修改文档树
-
修改方法类似python中的赋值
-
语法如下
soup = BeautifulSoup(‘Extremely bold’)
tag = soup.btag.name = “blockquote”
tag[‘class’] = ‘verybold’
tag[‘id’] = 1
tagExtremely bold
本章案例较多:
源代码请到GITHUB下载:
https://github.com/FangbaiZhang/TLXY_study_note/tree/master/Spider
下接:
Python3网络爬虫教程15——BeautifulSoup4中的编码,格式化,解析器的区别
https://blog.csdn.net/u011318077/article/details/86633466
最后
以上就是无奈书包为你收集整理的Python3网络爬虫教程14——BeautifulSoup4之搜索文档树 Extremely bold 的全部内容,希望文章能够帮你解决Python3网络爬虫教程14——BeautifulSoup4之搜索文档树 Extremely bold 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复