美文网首页
BeautifulSoup 遍历和获取

BeautifulSoup 遍历和获取

作者: 马桶里的白菜o | 来源:发表于2017-06-12 15:44 被阅读0次

    遍历文档树

    直接子节点

    要点:.contents .children 属性

    .contents

    tag 的 .content 属性可以将tag的子节点以列表的方式输出

    #["<meta charset='utf-8'/>","<title>The Dormouse's story</title>"]
    

    输出方式为列表,我们可以用列表索引来获取它的某一个元素

    print(soup.head.contents[0])
    #<meta charset="utf-8"/>
    



    .children

    它返回的不是一个 list,不过我们可以通过遍历获取所有子节点。

    我们打印输出 .children 看一下,可以发现它是一个 list 生成器对象

    print(soup.head.children)
    #<list_iterator object at 0x105c1cf28>
    

    获取里面的内容

    for child in  soup.body.children:
        print(child)
    

    所有子孙节点

    知识点:.descendants 属性

    .descendants

    .contents 和 .children 属性仅包含tag的直接子节点,.descendants 属性可以对所有tag的子孙节点进行递归循环,和 children类似,我们也需要遍历获取其中的内容。

    节点内容

    知识点:.string 属性

    多个内容

    知识点: .strings .stripped_strings 属性

    .strings

    获取多个内容,不过需要遍历获取,比如下面的例子

    .stripped_strings

    输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白内容

    父节点

    知识点: .parent 属性

    全部父节点

    知识点:.parents 属性

    通过元素的 .parents 属性可以递归得到元素的所有父辈节点,例如

    content = soup.head.title.string
    for parent in  content.parents:
        print parent.name
    

    兄弟节点

    知识点:.next_sibling .previous_sibling 属性

    兄弟节点可以理解为和本节点处在统一级的节点,.next_sibling 属性获取了该节点的下一个兄弟节点,.previous_sibling 则与之相反,如果节点不存在,则返回 None

    注意:实际文档中的tag的 .next_sibling 和 .previous_sibling 属性通常是字符串或空白,因为空白或者换行也可以被视作一个节点,所以得到的结果可能是空白或者换行

    全部兄弟节点

    知识点:.next_siblings .previous_siblings 属性

    通过 .next_siblings 和 .previous_siblings 属性可以对当前节点的兄弟节点迭代输出

    for sibling in soup.a.next_siblings:
        print(repr(sibling))
    

    前后节点

    知识点:.next_element .previous_element 属性

    相关文章

      网友评论

          本文标题:BeautifulSoup 遍历和获取

          本文链接:https://www.haomeiwen.com/subject/qzplqxtx.html