搜索文档树

1、find_all(name,attrs,recursive,text,**kwargs)

find_all()方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件

(1.1) name参数

可传入:

(1)字符串。查找与字符串完整匹配的内容

(2)正则表达式。通过正则表达式的match()来匹配内容

(3)传入列表。将列表中的任一元素匹配的内容返回。

(4)传True。会匹配所有的tag,但是不会返回字符串节点。

(5)传入自定义函数

(1.2 )keyword参数

>>> soup.find_all(id='link2')
[<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

注意:如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作指定名字tag的属性来搜索,如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性。

(1.3 )text参数

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

>>> soup.find_all(text=['Tillie','Elsie','Lacie'])
['Lacie', 'Tillie']

(1.4)limit参数

find_all方法返回全部的搜索结构,如果文档树很大,那么搜索效率会很慢,如果我们不需要全部结果,可以使用limit参数限制返回搜哟结果的数量,当搜索结果打到limit数量时,就回停止。

>>> soup.find_all('a')
[<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>]
>>> soup.find_all('a',limit=2)
[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

(1.5)recursive参数

调用tag的 find_all方法,BeautifulSoup会检查当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可是使用参数recursive=False

>>> soup.find_all('title')
[<title>The Dormouse's story</title>]
>>> soup.find_all('title',recursive=False)
[]

2、find(name,attrs,recursive,text,**kwargs)

他与find_all方法唯一的区别是find_all()方法的返回结果是值包含一个元素的列表,find()方法直接返回结果。

3、find_parents() find_parent()

find_all() 和 find() 只搜索当前节点的所有子节点,孙子节点等.

find_parents() 和 find_parent() 用来搜索当前节点的父辈节点,搜索方法与普通tag的搜索方法相同,搜索文档搜索文档包含的内容

4、find_next_siblings() find_next_sibling()

这2个方法通过 .next_siblings 属性对当 tag 的所有后面解析的兄弟 tag 节点进行迭代,

find_next_siblings() 方法返回所有符合条件的后面的兄弟节点,

find_next_sibling() 只返回符合条件的后面的第一个tag节点

5、find_previous_siblings() find_previous_sibling()

这2个方法通过 .previous_siblings 属性对当前 tag 的前面解析的兄弟 tag 节点进行迭代,

find_previous_siblings() 方法返回所有符合条件的前面的兄弟节点,

find_previous_sibling() 方法返回第一个符合条件的前面的兄弟节点

6、find_all_next() find_next()

这2个方法通过 .next_elements 属性对当前 tag 的之后的 tag 和字符串进行迭代,

find_all_next() 方法返回所有符合条件的节点,

find_next() 方法返回第一个符合条件的节点

7、find_all_previous() 和 find_previous()

这2个方法通过 .previous_elements 属性对当前节点前面的 tag 和字符串进行迭代,

find_all_previous() 方法返回所有符合条件的节点,

find_previous()方法返回第一个符合条件的节点

原文地址:https://www.cnblogs.com/themost/p/6684980.html