继上一节。BeautifulSoup的高级应用 之 find findAll,这一节,主要解说BeautifulSoup有关的其它几个重要应用函数。

本篇中,所使用的html为:

html_doc = """
<html>
<head><title>The Dormouse's story</title></head>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p>
<p class="story">...</p>
</html>"""

.contents.children

tag的 .contents 属性能够将 tag的子节点以列表的形式输出。

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)
head_tag = soup.head
head_tag
# <head><title>The Dormouse's story</title></head> head_tag.contents
[<title>The Dormouse's story</title>]
title_tag = head_tag.contents[0]
title_tag
# <title>The Dormouse's story</title>
title_tag.contents
# [u'The Dormouse's story']

BeautifulSoup对象本身一定会包括子节点 ,也就是说 标签也是 BeautifulSoup 对象的子节点 :

len(soup.contents)
# 1
soup.contents[0].name
# u'html'

字符串没有.contents 属性 ,由于字符串没有子节点 :

text = title_tag.contents[0]
text.contents
# AttributeError: 'NavigableString' object has no attribute 'contents'

通过 tagtagtag的 .children 生成器 ,能够对 tagtagtag的子节点进行循环 :

for child in title_tag.children:
print(child)
# The Dormouse's story

.descendants:

.contents和 .children 属性仅包括 tagtagtag的直接子节点 .比如 ,标签仅仅有一个直接子节点

head_tag.contents
# [<title>The Dormouse's story</title>]

可是 标签也包括一个子节点 :字符串 字符串 “The Dormouse’s story”, 这样的情况下字符串 “The Dormouse’s story” 也属于 标签的子孙节点 .descendants 属性能够对全部 tagtagtag的子孙节 点进行递归循环

for child in head_tag.descendants:
print(child)
# <title>The Dormouse's story</title>
# The Dormouse's story

标签仅仅有一个子节点 ,可是有 2个子孙节点 :节点和 的子 节点 , BeautifulSoup 有一个直接子节点 (节点 ), 却有非常多子孙节点 :

len(list(soup.children)) #这里是html的children子节点
# 1
len(list(soup.descendants)) #这里是html的descendants子孙节点 多个
# 25

.string:

假设 tagtagtag仅仅有一个 NavigableString 类型子节点 ,那么这个 tag能够使用.string 得到子节点 :

title_tag.string
# u'The Dormouse's story'

假设一个 tag仅有一个子节点 ,那么这个 tag也能够使用 .string 方法 ,输出结果与当前唯一子 节点的 .string 结果同样 .

假设 tag包括了多个子节点,tag就无法确定 .string.string.string .string.方法应该调用哪个子节点的内 , .string 的输出结果是 None。

strings 和 stripped_strings:

假设 tag中包括多个字符串 ,能够使用.strings 来循环获取 :

for string in soup.strings:
print(repr(string))

输出的字符串中 可能包括了非常多空格或行 ,使用 .stripped_strings 能够去除多余空白内容 :

for string in soup.stripped_strings:
print(repr(string))

下一篇我们解说父节点。兄弟节点,回退和前进。

BeautifulSoup的高级应用 之 contents children descendants string strings stripped_strings的更多相关文章

  1. BeautifulSoup的高级应用 之.parent .parents .next_sibling.previous_sibling.next_siblings.previous_siblings

    继上一篇BeautifulSoup的高级应用,主要解说的是contents children descendants string strings stripped_strings.本篇主要解说.pa ...

  2. BeautifulSoup库children(),descendants()方法的使用

    BeautifulSoup库children(),descendants()方法的使用 示例网站:http://www.pythonscraping.com/pages/page3.html 网站内容 ...

  3. Java高级数据类型转换:包装类、String字符串、Date类等与其他类型转换

    1.包装类过渡类型转换 一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了.例如: 当希望把float型转换为double型时: float f1=1 ...

  4. BeautifulSoup的成员结构

    >>> dir(soup)['ASCII_SPACES', 'DEFAULT_BUILDER_FEATURES', 'HTML_FORMATTERS', 'ROOT_TAG_NAME ...

  5. python库使用整理

    1. 环境搭建 l  Python安装包:www.python.org l  Microsoft Visual C++ Compiler for Python l  pip(get-pip.py):p ...

  6. 子标签和后代标签: .children 和 .descendants

    昨天看书,没有用enumurate枚举的时候,直接print,完全发觉不了他们的区别,倍感困惑. 今天看了其他人写的教程,用了枚举法,终于,终于,发现它们之间的区别啦!敲锣打鼓,掌声响起来 还要注意, ...

  7. BeautifulSoup 的用法

    转自:http://cuiqingcai.com/1319.html Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python ...

  8. Python -- BeautifulSoup的学习使用

    BeautifulSoup4.3 的使用 下载和安装 # 下载 http://www.crummy.com/software/BeautifulSoup/bs4/download/ # 解压后 使用r ...

  9. Spider_Man_4 の BeautifulSoup

    一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...

随机推荐

  1. UVALive - 6266 Admiral 费用流

    UVALive - 6266 Admiral 题意:找两条完全不相交不重复的路使得权值和最小. 思路:比赛的时候时间都卡在D题了,没有仔细的想这题,其实还是很简单的,将每个点拆开,连一条容量为1,费用 ...

  2. cf 864 F. Cities Excursions

    F. Cities Excursions There are n cities in Berland. Some pairs of them are connected with m directed ...

  3. How Blink works

    How Blink works Author: haraken@ Last update: 2018 Aug 14 Status: PUBLIC Working on Blink is not eas ...

  4. [USACO07JAN]平衡的阵容Balanced Lineup RMQ模板题

    Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 50000 + ...

  5. python jieba分词工具

    源码地址:https://github.com/fxsjy/jieba 演示地址:http://jiebademo.ap01.aws.af.cm/ 特点 1,支持三种分词模式: a,精确模式,试图将句 ...

  6. 实现人脸识别性别之路---try语句的使用

    Try语句 用法:处理异常信息 存在的形式:try-except X-except T...-except-else-finally(其中X T为错误的类型) 表达意思:try语句是执行正常语句,如果 ...

  7. hzwer 模拟题 祖孙询问

    祖孙询问 题目描述 已知一棵n个节点的有根树.有m个询问.每个询问给出了一对节点的编号x和y,询问x与y的祖孙关系. 输入输出格式 输入格式: 输入第一行包括一个整数n表示节点个数. 接下来n行每行一 ...

  8. Tomcat线程池与NIO配置

    每个web客户端请求对于服务器端来说就一个单独的线程,客户端的请求数量增多将会导致线程数就上去了,CPU就忙着跟线程切换. 而NIO则是使用单线程(单个CPU)或者只使用少量的多线程(多CPU)来接受 ...

  9. HDU - 2254 奥运 (求等比数列和)

    Description 北京迎来了第一个奥运会,我们的欢呼声响彻中国大地,所以今年的奥运金牌 day day up! 比尔盖兹坐上鸟巢里,手里摇着小纸扇,看的不亦乐乎,被俺们健儿的顽强拼搏的精神深深的 ...

  10. RvmTranslator6.0

    RvmTranslator6.0 eryar@163.com 1. Introduction RvmTranslator can translate the RVM file exported by ...