一文弄清Python网络爬虫解析库!内含多个实例讲解( 三 )

  • .previous_siblings:获取当前Tag的上面所有的兄弟节点,返回一个生成器
  • .next_siblings:获取当前Tag的下面所有的兄弟节点,返回一个生成器
  • .previous_element:获取解析过程中上一个被解析的对象(字符串或tag),可能与previous_sibling相同,但通常是不一样的
  • .next_element:获取解析过程中下一个被解析的对象(字符串或tag),可能与next_sibling相同,但通常是不一样的
  • .previous_elements:返回一个生成器,可以向前访问文档的解析内容
  • .next_elements:返回一个生成器,可以向后访问文档的解析内容
  • .has_attr:判断Tag是否包含属性
  • 也可以通过BeautifulSoup进行搜索文档树:
    • find_all(name, attrs, recursive, text, **kwargs)
    在上面的示例中我们简单介绍了find_all的使用,接下来介绍一下find_all的更多用法-过滤器 。这些过滤器贯穿整个搜索API,过滤器可以被用在tag的name中,节点的属性等 。
    from bs4 import BeautifulSoup import re bs = BeautifulSoup(html,"html.parser") t_list = bs.find_all(re.compile("a")) for item in t_list:print(item)
    • find()
    find()将返回符合条件的第一个Tag,有时我们只需要或一个Tag时,我们就可以用到find()方法了 。当然了,也可以使用find_all()方法,传入一个limit=1,然后再取出第一个值也是可以的,不过未免繁琐 。
    from bs4 import BeautifulSoup import re # 返回只有一个结果的列表t_list = bs.find_all("title",limit=1) print(t_list) # 返回唯一值t = bs.find("title") print(t) # 如果没有找到,则返回Nonet = bs.find("abc") print(t)
    • CSS选择器
    BeautifulSoup支持发部分的CSS选择器,在Tag获取BeautifulSoup对象的.select()方法中传入字符串参数,即可使用CSS选择器的语法找到Tag:
    • 通过标签名查找
    print(bs.select('title'))print(bs.select('a'))
    • 通过类名查找
    print(bs.select('.mnav'))
    • 通过id查找
    print(bs.select('#u1'))
    • 组合查找
    print(bs.select('div .bri'))
    • 属性查找
    print(bs.select('a[class="bri"]'))print(bs.select('a[href=https://www.isolves.com/it/cxkf/yy/Python/2021-04-12/"http://tieba.baidu.com"]'))
    • 直接子标签查找
    t_list = bs.select("head > title")print(t_list)
    • 兄弟节点标签查找
    t_list = bs.select(".mnav ~ .bri")print(t_list)
    • 获取内容
    t_list = bs.select("title")print(bs.select('title')[0].get_text())
    一文弄清Python网络爬虫解析库!内含多个实例讲解

    文章插图
     
    三、pyquery库1.库简介
    如果觉得Xpath有些难懂,BeautifulSoup有些难记,那pyquery一定适合你 。pyquery 可让你用 jQuery 的语法来对 xml 进行操作 。这和 jQuery 十分类似 。如果利用 lxml,pyquery 对 xml 和 html 的处理将更快 。这个库不是一个可以和 JAVAScript交互的代码库,它只是非常像 jQuery API 而已 。
    2.入门测试
    # html为上文BeautifulSoup测试实例from pyquery import PyQuery as pqdoc = pq(html)print(doc('title').text()) # '标题'print(doc('div').filter('.head_wrapper').text()) # '文字1'print(doc('a[name=tj_trnews]').text()) # 同上,只是这种方法支持除了id和class之外的属性筛选print(doc('div').filter('#u1').find('a').text()) # '列表1第1项 列表1第2项'print(doc('div#u1 a').text()) # 简化形式print(doc('div#u1 > a').text()) # 节点之间用>连接也可以,但是加>只能查找子元素,空格子孙元素3.基本方法
    • 初始化
    # 字符串初始化:from pyquery import PyQuery as pqdoc=pq(html)print(doc('li'))# URL初始化doc=pq(url="https://ww.baidu.com")print(doc)a = open('test.html','r',encoding='utf8')doc=pq(a.read())print(doc)
    • 基本css选择器
    # id 为container,class为list下的所有liprint(doc('.head_wrapper #u1 a'))
    • 查找节点
    # .find():查找所有子孙节点items = doc('#u1')print(items.find('a'))# .children():查找子节点items=doc('#u1')print(items.children('.mnav'))# 父节点doc=pq(html)items=doc('.mnav')print(items.parent())print(items.parents())# 兄弟节点doc=pq(html)li=doc('.mnav')print(li.siblings('.bri'))
    • 遍历


    推荐阅读