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()方法返回第一个符合条件的节点