学习笔记之BeautifulSoup(3)——搜索文档树

一、过滤器
过滤器贯穿整个搜索的API,过滤器可以被用在tag的name中,节点的属性中,字符串中或他们的混合中。
1.字符串
最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容。如果传入字节码参数,Beautiful Soup会当作UTF-8编码,可以传入一段Unicode 编码来避免Beautiful Soup解析编码出错。
代码:
在这里插入图片描述

运行结果:
在这里插入图片描述

2.正则表达式
如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容。
代码:
在这里插入图片描述
运行结果:
在这里插入图片描述

3.列表
如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回。
代码:
在这里插入图片描述
运行结果:
在这里插入图片描述

4.True
True 可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点。
代码:
在这里插入图片描述

运行结果:
在这里插入图片描述

5.方法
如果没有合适过滤器,那么还可以定义一个方法,方法只接受一个元素参数 ,如果这个方法返回 True 表示当前元素匹配并且被找到,如果不是则反回 False。通过一个方法来过滤一类标签属性的时候, 这个方法的参数是要被过滤的属性的值, 而不是这个标签。
代码:

运行结果:
在这里插入图片描述
二、find_all()
find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件。
find_all( name , attrs , recursive , string , *kwargs )
参数:
1.name 参数
可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉(搜索 name 参数的值可以使任一类型的 过滤器 ,字符窜,正则表达式,列表,方法或是 True)
2.属性参数
(1)如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作指定名字tag的属性来搜索。如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性,如果传入 href 参数,Beautiful Soup会搜索每个tag的”href”属性。(搜索指定名字的属性时可以使用的参数值包括 字符串 , 正则表达式 , 列表, True )使用多个指定名字的参数可以同时过滤tag的多个属性,有些tag属性在搜索不能使用,比如HTML5中的 data-
属性,但是可以通过 find_all() 方法的 attrs 参数定义一个字典参数来搜索包含特殊属性的tag。(2)按照CSS类名搜索tag的功能非常实用,但标识CSS类名的关键字 class 在Python中是保留字,使用 class 做参数会导致语法错误,可以通过 class_ 参数搜索有指定CSS类名的tag,tag的 class 属性是 多值属性 .按照CSS类名搜索tag时,可以分别搜索tag中的每个CSS类名,搜索 class 属性时也可以通过CSS值完全匹配(class_ 参数同样接受不同类型的 过滤器 ,字符串,正则表达式,方法或 True)。
3string参数
.通过 string 参数可以搜索文档中的字符串内容,还可以与其它参数混合使用来过滤,tag.Beautiful Soup会找到 .string 方法与 string 参数值相符的tag。(string 参数接受 字符串 , 正则表达式 , 列表, True )
4.limit参数
find_all() 方法返回全部的搜索结构,如果文档树很大那么搜索会很慢.如果我们不需要全部结果,可以使用 limit 参数限制返回结果的数量。
5.recursive参数
调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数 recursive=False。
三、find()
find( name , attrs , recursive , string , **kwargs )
1.find_all() 方法将返回文档中符合条件的所有tag,find()只返回第一个。
2.find_all() 方法的返回结果是值包含一个元素的列表,而 find() 方法直接返回结果;find_all() 方法没有找到目标是返回空列表, find() 方法找不到目标时,返回 None。
四、find_parents() 和 find_parent()
find_parents( name , attrs , recursive , string , **kwargs )
find_parent( name , attrs , recursive , string , **kwargs )
find_all() 和 find() 只搜索当前节点的所有子节点,孙子节点等. find_parents() 和 find_parent() 用来搜索当前节点的父辈节点,搜索方法与普通tag的搜索方法相同,搜索文档搜索文档包含的内容。
五、一些其他方法(用法类似)
find_previous_siblings( name , attrs , recursive , string , **kwargs )
find_previous_sibling( name , attrs , recursive , string , **kwargs )
find_next_siblings( name , attrs , recursive , string , **kwargs )
find_next_sibling( name , attrs , recursive , string , **kwargs )
find_all_next( name , attrs , recursive , string , **kwargs )
find_next( name , attrs , recursive , string , **kwargs )
find_all_previous( name , attrs , recursive , string , **kwargs )
find_previous( name , attrs , recursive , string , **kwargs )
六、CSS选择器
Beautiful Soup支持大部分的CSS选择器,在 Tag 或 BeautifulSoup 对象的 .select() 方法中传入字符串参数, 即可使用CSS选择器的语法找到tag。
1.通过tag标签逐层查找
2.找到某个tag标签下的直接子标签
3.找到兄弟节点标签
4.通过CSS的类名查找
5.通过tag的id查找
6.同时用多种CSS选择器查询元素
7.通过是否存在某个属性来查找
8.通过语言设置来查找
代码:
在这里插入图片描述
运行结果:
在这里插入图片描述
对于熟悉CSS选择器语法的人来说这是个非常方便的方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值