zoukankan      html  css  js  c++  java
  • 读BeautifulSoup官方文档之与bs有关的对象和属性(3)

    上一节说到.string的条件很苛刻, 如果某个tag里面包含了超过一个children, 就会返回None, 但是这里提供另外一种方式 .strings, 它返回的是一个generator, 

    比如对于 :

    <body>aa
    bb
        <b> aabbccdd </b>
    </body>

    我们调用

    1 for each in soup.body.strings:
    2     print(repr(each))

    结果如下 :

    'aa
    bb
        '
    ' aabbccdd '
    '
    '

    这样空格太多, 所以我们可用用另外一种stripped_strings来代替.strings, 它将所有完全由空白组成的字符串去除, 同时其他字符串中去除前后的空白字符, 它的返回结果如下 :

    'aa
    bb'
    'aabbccdd'

    子标签到这里差不多就完了, 接下来看父标签和兄弟标签.

    .parent的返回的当然就是父标签了, 同时父标签也是唯一的, 所以.parent返回的直接的tag对象, 另外还有一个.parents, 它返回一个generator, 里面装的是从当前标签的父标签开始的, 依次往上.(先是父标签, 然后是父标签的父标签, 以此类推指导html树的根标签...)

    .next_sibling and .previous_sibling这个返回的是与该标签同级的标签的下一个标签和上一个标签, 这里有一点要特别注意, 在真正的html文件中, 一个标签的下一个标签或者上一标签很可能是换行...

    <b> ccccccccc</b>
    <b> <span>xxxxxx</span> abcd</b>
    print(repr(soup.span.parent.previous_sibling))

    结果是一个回车, 所以这里要特别小心...当然也有.next_siblings和.previous_siblings,同样也是生成器, 和之前类似, 这里就不多介绍了...

    然后是.next_element和.previous_element, 返回的是按照parser的解析顺序的下一个tag和前一个tag, 某些情况下和next_sibling/previous_sibling 相同, 但也可能不同. 比如:

    <b> <span>xxxxxx</span> abcd</b>

    我们用sou.span.next_element的出来的将是xxxxxx, 而用next_sebling得出来的是' abcd', 同样的思路, 也有.next_elements 和  .previous_elements, 这里就不说了.

  • 相关阅读:
    爬虫之爬取网贷之家在档P2P平台基本数据并存入数据库
    Python抓取第一网贷中国网贷理财每日收益率指数
    div左右布局
    IIS7.0+SqlServer2012,进行.net网站发布的安装全过程
    SpringMVC+Mybatis+Mysql实战项目学习环境搭建
    文本框字符长度动态统计
    html里面自定义弹出窗口
    windows下取linux系统里面的文件
    网页中的电话号码实现一键直呼
    测试
  • 原文地址:https://www.cnblogs.com/nzhl/p/5591025.html
Copyright © 2011-2022 走看看