上一节说到.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. Android 报错 Error:(303, 27) 错误: 找不到符号 符号: 方法 sin(float) 位置: 类 FloatMath

    今天更新了sdk,升级到Android SDK 23.发现Android studio用23编译 SlidingMenu时出错,错误如下: 报错的地方这这里: float distanceInflue ...

  2. https://sourceware.org/gdb/onlinedocs/gdb/Forks.html

    https://sourceware.org/gdb/onlinedocs/gdb/Forks.html Next: Checkpoint/Restart, Previous: Threads, Up ...

  3. Js数组排序函数:sort()

    原文链接:https://blog.csdn.net/qq_37936542/article/details/78979521 js原生的 sort() 排序函数使用起来很方便 语法:arrayObj ...

  4. Erlang 进制转换

    http://www.cnblogs.com/me-sa/archive/2012/03/20/erlang0047.html bnot unary bitwise not integer div i ...

  5. 【转】dbx用法讲解

    http://blog.chinaunix.net/uid-25544300-id-328735.html dbx 命令 用途 提供了一个调试和运行程序的环境. 语法 dbx [ -a Process ...

  6. 微信小程序从零开始开发步骤(三)

    上一章节,我们分享了如何创建一个新的页面和设置页面的标题,这一章我们来聊聊底部导航栏是如何实现的.即点击底部的导航,会实现不同对应页面之间的切换. 我们先来看个我们要实现的底部导航栏的效果图:(三个导 ...

  7. 【codeforces 754B】 Ilya and tic-tac-toe game

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. android --Activity生命周期具体解释

    一. 再探Activity生命周期 为了研究activity的生命周期,简单測试代码例如以下. package com.example.testactivity; import android.app ...

  9. 【rlz000】字串找数

    Time Limit: 3 second Memory Limit: 2 MB 问题描述 输入一个字符串,内有数字和非数字字符.如A123X456Y7A,302ATB567BC,统计共有多少个整数, ...

  10. hadoop 3.x 单机集群配置/启动时的问题处理

    一.修改配置文件(hadoop目录/etc/hadoop/配置文件) 1.修改hadoop-env.sh,指定JAVA_HOME 修改完毕后 2.修改core-site.xml <configu ...