三、树的搜索:
1)find_all(name, attrs, recursive, string, limit, **kwargs):
该方法将搜索当前Tag对象的所有子节点,并且按照过滤条件得到筛选后对象的列表。
name参数:
1.1、传字符串:
# print(soup.findAll('a'))
1.2、传正则表达式:
# import re
for tag in soup.findAll(re.compile('^b')):
print(tag.name)
1.3、传列表:
# soup.findAll(['a', 'b'])
1.4、传True:(注:True参数将匹配文档中所有的节点,但是不包括文本字符串)
# for tag in soup.findAll(True):
print(tag.name)
1.5、传入函数:(注:可以根据函数返回值的True/False来得到匹配的节点)
# def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
# soup.findAll(has_class_but_no_id)
关键字参数:
可以传入一个或者多个关键字,BeautifulSoup会搜索当前Tag下的每一个节点的该关键字及其对应的值。
# soup.findAll(href=re.compile('elsie'), id='link1')
# soup.findAll('a', class_='sister') 注:class是python的关键字,所以要特殊处理
text参数:
# soup.findAll(text='Elsie')
limit参数:
# soup.findAll('a', limit=2)
recursive参数:
将该参数设为False可限制只搜索当前Tag的直接子节点
2)find( name , attrs , recursive , text , **kwargs ):
与 findAll方法唯一的区别是findAll方法的返回结果是值包含一个元素的列表,而 find() 方法直接返回结果
3) 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) ind_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()方法返回第一个符合条件的节点
1)find_all(name, attrs, recursive, string, limit, **kwargs):
该方法将搜索当前Tag对象的所有子节点,并且按照过滤条件得到筛选后对象的列表。
name参数:
1.1、传字符串:
# print(soup.findAll('a'))
1.2、传正则表达式:
# import re
for tag in soup.findAll(re.compile('^b')):
print(tag.name)
1.3、传列表:
# soup.findAll(['a', 'b'])
1.4、传True:(注:True参数将匹配文档中所有的节点,但是不包括文本字符串)
# for tag in soup.findAll(True):
print(tag.name)
1.5、传入函数:(注:可以根据函数返回值的True/False来得到匹配的节点)
# def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
# soup.findAll(has_class_but_no_id)
关键字参数:
可以传入一个或者多个关键字,BeautifulSoup会搜索当前Tag下的每一个节点的该关键字及其对应的值。
# soup.findAll(href=re.compile('elsie'), id='link1')
# soup.findAll('a', class_='sister') 注:class是python的关键字,所以要特殊处理
text参数:
# soup.findAll(text='Elsie')
limit参数:
# soup.findAll('a', limit=2)
recursive参数:
将该参数设为False可限制只搜索当前Tag的直接子节点
2)find( name , attrs , recursive , text , **kwargs ):
与 findAll方法唯一的区别是findAll方法的返回结果是值包含一个元素的列表,而 find() 方法直接返回结果
3) 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) ind_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()方法返回第一个符合条件的节点
来源:CSDN
作者:zhaocen_1230
链接:https://blog.csdn.net/zhaocen_1230/article/details/76166114