Python爬虫学习纪要(二):BeautifulSoup相关知识点2

房东的猫 提交于 2019-12-04 05:29:18
三、树的搜索:
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()方法返回第一个符合条件的节点
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!