读BeautifulSoup官方文档之与bs有关的对象和属性(2)
上一节说到tag, 这里接着讲, tag有个属性叫做string, tag.string其实就是我们要掌握的四个对象中的第二个 ---- NavigableString, 它代表的是该tag内的text(甚至包括空白字符, 该tag内如果有别的tag, 必须前后紧挨不带空格, 否则返回None, 这一点的原因在下面提到了.), 其实这个NavigableString就是对于普通的Unicode的字符串的封装, 除了他提供一些对方便html结构树进行搜索的方法, 同时我们可以用.replace_with()来替换tag的内容, 我们可以用 unicode() 来将它转化为普通string.
tag.string
# u'Extremely bold'
type(tag.string)
# <class 'bs4.element.NavigableString'> unicode_string = unicode(tag.string)
unicode_string
# u'Extremely bold'
type(unicode_string)
# <type 'unicode'> tag.string.replace_with("No longer bold")
tag
# <blockquote>No longer bold</blockquote>
最后一个要说的对象叫做Comment, Comment 其实就是特殊的NavigableString对象. 经过实现发现只有紧挨这父tag写, 才有效果, 否则会返回None.(原因也在下面提到了)
markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>"
#<b> <!--前面有一个空格--></b> --> 这样会直接返回None
soup = BeautifulSoup(markup)
comment = soup.b.string
type(comment)
# <class 'bs4.element.Comment'>
了解了这四类对象, 接下来我们就可以探究如何找到所需要的内容...
下面是最简单的方式 :
soup.head
# <head><title>The Dormouse's story</title></head> 如果有多个返回第一个 soup.body.b
# <b>The Dormouse's story</b> 先找到第一个body, 再找body中的第一个b soup.b
#如果上例中b是最先出现的, 那么也可以直接索引得到.
.contents 和 .children:
这两者的区别在于.contents返回的是列表, .children返回的是generator(但是其实内容都是一样的)...
比如对于
<body>
<b>
aabbccdd
</b>
</body>
soup = BeautifulSoup(open('test.html'), 'lxml')
print(soup.body.contents)
结果是:
['\n', <b>
aabbccdd
</b>, '\n']
值得一提的是BeautifulSoup也有自己的contents.
.descendants :
这个和.children唯一的区别在于前者返回所有子孙后者只返回直系孩子, 就不多说了.
.string :
如果一个tag只有一个children并且那个children还是NavigableString(这种情况就是tag的内容是纯文字), 那么我们可以用.string来获得它.
<b>
aabbccdd
</b>
上述html的b.contents是这样的 :
['\n aabbccdd\n']
对于这种, 就是符合上面所说的情况的, 就可以用b.string来获得它...
同时如果一个tag只有一个children并且它的children是另外一个tag, 且另外一个tag有一个.string, 那么这个tag的.string就等于它的孩子的.string.
对于这个例子是不行的 :
<body>
<b>
aabbccdd
</b>
</body>
对这个例子来说, 调用.contents的结果是这样的:
['\n', <b>
aabbccdd
</b>, '\n']
除非把上面的例子写成这样 :
<body><b> aabbccdd </b></body>
这就是为什么我上面说要想得到.string必须tag前后紧挨不能有空格的原因.
读BeautifulSoup官方文档之与bs有关的对象和属性(2)的更多相关文章
- 读BeautifulSoup官方文档之与bs有关的对象和属性(1)
自从10号又是5天没更, 是, 我再一次断更... 原因是朋友在搞python, 老问我问题, 我python也是很久没碰了, 于是为了解决他的问题, 我只能重新开始研究python, 为了快速找回感 ...
- 读BeautifulSoup官方文档之与bs有关的对象和属性(3)
上一节说到.string的条件很苛刻, 如果某个tag里面包含了超过一个children, 就会返回None, 但是这里提供另外一种方式 .strings, 它返回的是一个generator, 比如对 ...
- 读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() { ... }, ...
随机推荐
- Android 闹钟最终版
以下是我发现的几点闹钟中重要的点,分享一下: (1)在闹钟中有AudioManager管理机制,这个机制可以申请和释放OnAudioFocusChangeListener监听. 还有mTelephon ...
- [Docker] Accessing a Container
If you want to get into container and look around, you can use: docker container exec to run against ...
- git入门基础
git基础 参考: 官网git基础 git 文件的生命周期 文件的生命周期图: git中的文件可以分为4个阶段. Untracked : 这是目录中没有被跟踪的文件,即不在git项目中,使用 git ...
- PHP CodeBase: 判断用户是否手机访问
随着移动设备的普及,网站也会迎来越来越多移动设备的访问.用适应PC的页面,很多时候对手机用户不友好,那么有些时候,我们需要判断用户是否用手机访问,如果是手机的话,就跳转到指定的手机友好页面.这里就介绍 ...
- want cry -- 137,139,445
通过wireshark抓包发现smb的请求报文,目的端口为445,没有应答报文 之前设置了“阻止连接”导致smb访问被拒绝.修改为要求对连接进行加密 就可以访问
- mysql的四种启动方式
查看该版本的相应参数: mysqld --verbose --help 1.mysqld ./mysqld --defaults-file=/etc/my.cnf --user=mysql ...
- Struts2之配置使用
重要声明:此次学习struts2使用的版本号为:struts-2.3.15.3.假设是用的其它版本号出现的问题能够联系我. 一. 1.首先就是打开myeclipse创建project名为:struts ...
- php课程 6-23 mb_substr字符串截取怎么用
php课程 6-23 mb_substr字符串截取怎么用 一.总结 一句话总结: 1.mb_substr字符串截取怎么用? 参数为:起始位置,个数 $str='我是小金,我是中国人!'; echo & ...
- java十五个常用类学习及方法举例
<code class="language-java">import java.util.Scanner; import java.util.Properties; i ...
- 免费的 C/C++ 编译&解释 器列表
摘自<C++编程网>,详细介绍请参考http://www.cpp-prog.com/2009/0520/118.html MicrosoftVisual C++ 2008 Express ...