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

比如对于 :

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

我们调用

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

结果如下 :

'aa\nbb\n    '
' aabbccdd '
'\n'

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

'aa\nbb'
'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, 这里就不说了.

读BeautifulSoup官方文档之与bs有关的对象和属性(3)的更多相关文章

  1. 读BeautifulSoup官方文档之与bs有关的对象和属性(1)

    自从10号又是5天没更, 是, 我再一次断更... 原因是朋友在搞python, 老问我问题, 我python也是很久没碰了, 于是为了解决他的问题, 我只能重新开始研究python, 为了快速找回感 ...

  2. 读BeautifulSoup官方文档之与bs有关的对象和属性(2)

    上一节说到tag, 这里接着讲, tag有个属性叫做string, tag.string其实就是我们要掌握的四个对象中的第二个 ---- NavigableString,  它代表的是该tag内的te ...

  3. 读BeautifulSoup官方文档之html树的打印

    prettify()能返回一个格式良好的html的Unicode字符串 : markup = '<a href="http://example.com/">I link ...

  4. 读BeautifulSoup官方文档之html树的搜索(1)

    之前介绍了有关的四个对象以及他们的属性, 但是一般情况下要在杂乱的html中提取我们所需的tag(tag中包含的信息)是比较复杂的, 现在我们可以来看看到底有些什么搜索的方法. 最主要的两个方法当然是 ...

  5. 读BeautifulSoup官方文档之html树的修改

    修改html树无非是对其中标签的改动, 改动标签的名字(也就是类型), 属性和标签里的内容... 先讲这边提供了很方便的方法来对其进行改动... soup = BeautifulSoup('<b ...

  6. 读BeautifulSoup官方文档之html树的搜索(2)

    除了find()和find_all(), 这里还提供了许多类似的方法我就细讲了, 参数和用法都差不多, 最后四个是next, previous是以.next/previous_element()来说的 ...

  7. 读vue-cli3 官方文档的一些学习记录

    原来一直以为vue@cli3 就是创建模板的工具,读了官方文档才知道原来这么有用,不少配置让我长见识了 Prefetch 懒加载配置 懒加载相信大家都是知道的,使用Import() 语法就可以在需要的 ...

  8. Beautifulsoup官方文档

    Beautiful Soup 中文文档 原文 by Leonard Richardson (leonardr@segfault.org) 翻译 by Richie Yan (richieyan@gma ...

  9. 读jQuery官方文档:$(document).ready()与避免冲突

    $(document).ready() 通常你想在DOM结构加载完毕之后才执行相关脚本.使用原生JavaScript,你可能调用window.onload = function() { ... }, ...

随机推荐

  1. session了解及超时处理

    Session了解 Session是什么 引言     在web开发中,session是个非常重要的概念.在许多动态网站的开发者看来,session就是一个变量,而且其表现像个黑洞,他只需要将东西在合 ...

  2. [Compose] 16. Apply multiple functors as arguments to a function (Applicatives)

    We find a couple of DOM nodes that may or may not exist and run a calculation on the page height usi ...

  3. 【C/C++学院】(23)Mysql数据库编程--C语言编程实现mysqlclient

    [送给在路上的程序猿] 对于一个开发人员而言,能够胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够利运用到系统中,由此简化系统的开发,是其架构生涯的第一步 ...

  4. C++基础代码--20余种数据结构和算法的实现

    C++基础代码--20余种数据结构和算法的实现 过年了,闲来无事,翻阅起以前写的代码,无意间找到了大学时写的一套C++工具集,主要是关于数据结构和算法.以及语言层面的工具类.过去好几年了,现在几乎已经 ...

  5. 【u219】最长链

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. [提示] 关 ...

  6. Graphics-Processing Architecture Based on Approximate Rendering

    BACKGROUND The present invention generally relates to the processing of graphics data, and particula ...

  7. hadoop 3.x Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

    启动hdfs后执行share目录中自带的mapreduce程序时报如下错误 找到$HADOOP_HOME/etc/mapred-site.xml,增加以下配置 <property> < ...

  8. jQuery Mobile移动开发

    1.在<head>元素中包括JavaScript文件是传统的方法.然而,依据Yahoo!"80%的终于用户响应时间在前端上"的说法,这些事件大部分花在资产的下载上,比如 ...

  9. URAL 1684. Jack&#39;s Last Word KMP

    题目来源:URAL 1684. Jack's Last Word 题意:输入a b 把b分成若干段 每一段都是a的前缀 思路:b为主串 然后用a匹配b 记录到b的i位置最大匹配的长度 然后切割 切割的 ...

  10. 黑科技 —— Type-C 接口与 USB3.1

    Type-C 接口解决了 USB 永远插不准的世界性难题. 小开科普一分钟:究竟USB Type-C是何方神圣? 1. Type-C USB Type-C,简称是 USB-C.Type-C 只是 US ...