读BeautifulSoup官方文档之与bs有关的对象和属性(3)
上一节说到.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)的更多相关文章
- 读BeautifulSoup官方文档之与bs有关的对象和属性(1)
自从10号又是5天没更, 是, 我再一次断更... 原因是朋友在搞python, 老问我问题, 我python也是很久没碰了, 于是为了解决他的问题, 我只能重新开始研究python, 为了快速找回感 ...
- 读BeautifulSoup官方文档之与bs有关的对象和属性(2)
上一节说到tag, 这里接着讲, tag有个属性叫做string, tag.string其实就是我们要掌握的四个对象中的第二个 ---- NavigableString, 它代表的是该tag内的te ...
- 读BeautifulSoup官方文档之html树的打印
prettify()能返回一个格式良好的html的Unicode字符串 : markup = '<a href="http://example.com/">I link ...
- 读BeautifulSoup官方文档之html树的搜索(1)
之前介绍了有关的四个对象以及他们的属性, 但是一般情况下要在杂乱的html中提取我们所需的tag(tag中包含的信息)是比较复杂的, 现在我们可以来看看到底有些什么搜索的方法. 最主要的两个方法当然是 ...
- 读BeautifulSoup官方文档之html树的修改
修改html树无非是对其中标签的改动, 改动标签的名字(也就是类型), 属性和标签里的内容... 先讲这边提供了很方便的方法来对其进行改动... soup = BeautifulSoup('<b ...
- 读BeautifulSoup官方文档之html树的搜索(2)
除了find()和find_all(), 这里还提供了许多类似的方法我就细讲了, 参数和用法都差不多, 最后四个是next, previous是以.next/previous_element()来说的 ...
- 读vue-cli3 官方文档的一些学习记录
原来一直以为vue@cli3 就是创建模板的工具,读了官方文档才知道原来这么有用,不少配置让我长见识了 Prefetch 懒加载配置 懒加载相信大家都是知道的,使用Import() 语法就可以在需要的 ...
- Beautifulsoup官方文档
Beautiful Soup 中文文档 原文 by Leonard Richardson (leonardr@segfault.org) 翻译 by Richie Yan (richieyan@gma ...
- 读jQuery官方文档:$(document).ready()与避免冲突
$(document).ready() 通常你想在DOM结构加载完毕之后才执行相关脚本.使用原生JavaScript,你可能调用window.onload = function() { ... }, ...
随机推荐
- session了解及超时处理
Session了解 Session是什么 引言 在web开发中,session是个非常重要的概念.在许多动态网站的开发者看来,session就是一个变量,而且其表现像个黑洞,他只需要将东西在合 ...
- [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 ...
- 【C/C++学院】(23)Mysql数据库编程--C语言编程实现mysqlclient
[送给在路上的程序猿] 对于一个开发人员而言,能够胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够利运用到系统中,由此简化系统的开发,是其架构生涯的第一步 ...
- C++基础代码--20余种数据结构和算法的实现
C++基础代码--20余种数据结构和算法的实现 过年了,闲来无事,翻阅起以前写的代码,无意间找到了大学时写的一套C++工具集,主要是关于数据结构和算法.以及语言层面的工具类.过去好几年了,现在几乎已经 ...
- 【u219】最长链
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. [提示] 关 ...
- Graphics-Processing Architecture Based on Approximate Rendering
BACKGROUND The present invention generally relates to the processing of graphics data, and particula ...
- 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> < ...
- jQuery Mobile移动开发
1.在<head>元素中包括JavaScript文件是传统的方法.然而,依据Yahoo!"80%的终于用户响应时间在前端上"的说法,这些事件大部分花在资产的下载上,比如 ...
- URAL 1684. Jack's Last Word KMP
题目来源:URAL 1684. Jack's Last Word 题意:输入a b 把b分成若干段 每一段都是a的前缀 思路:b为主串 然后用a匹配b 记录到b的i位置最大匹配的长度 然后切割 切割的 ...
- 黑科技 —— Type-C 接口与 USB3.1
Type-C 接口解决了 USB 永远插不准的世界性难题. 小开科普一分钟:究竟USB Type-C是何方神圣? 1. Type-C USB Type-C,简称是 USB-C.Type-C 只是 US ...