python解析html的库_python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)

BeautifulSoup

如何使用BeautifulSoup

它由很多标签(Tag)组成,比如 html、head、title等等都是标签

一个标签对构成一个节点,比如 ... 是一个根节点

节点之间存在某种关系,比如 h1 和 p 互为邻居,他们是相邻的兄弟(sibling)节点

h1 是 body 的直接子(children)节点,还是 html 的子孙(descendants)节点

body 是 p 的父(parent)节点,html 是 p 的祖辈(parents)节点

嵌套在标签之间的字符串是该节点下的一个特殊子节点,比如 “hello, world” 也是一个节点,只不过没名字。

使用 BeautifulSoup

构建一个 BeautifulSoup 对象需要两个参数,第一个参数是将要解析的 HTML 文本字符串,第二个参数告诉 BeautifulSoup 使用哪个解析器来解析 HTML。

解析器负责把 HTML 解析成相关的对象,而 BeautifulSoup 负责操作数据(增删改查)。”html.parser” 是Python内置的解析器,”lxml” 则是一个基于c语言开发的解析器,它的执行速度更快,不过它需要额外安装

通过 BeautifulSoup 对象就可以定位到 HTML 中的任何一个标签节点。

from bs4 import BeautifulSoup

text = """

hello, world

BeautifulSoup

如何使用BeautifulSoup

第二个p标签

python

"""

soup = BeautifulSoup(text, "html.parser")

# title 标签

>>> soup.title

hello, world

# p 标签

>>> soup.p

\u5982\u4f55\u4f7f\u7528BeautifulSoup

# p 标签的内容

>>> soup.p.string

u'\u5982\u4f55\u4f7f\u7528BeautifulSoup'

BeatifulSoup 将 HTML 抽象成为 4 类主要的数据类型,分别是Tag , NavigableString , BeautifulSoup,Comment 。每个标签节点就是一个Tag对象,NavigableString 对象一般是包裹在Tag对象中的字符串,BeautifulSoup 对象代表整个 HTML 文档。例如:

>>> type(soup)

>>> type(soup.h1)

>>> type(soup.p.string)

Tag

每个 Tag 都有一个名字,它对应 HTML 的标签名称。

>>> soup.h1.name

u'h1'

>>> soup.p.name

u'p'

标签还可以有属性,属性的访问方式和字典是类似的,它返回一个列表对象

>>> soup.p['class']

[u'bold']

NavigableString

获取标签中的内容,直接使用 .stirng 即可获取,它是一个 NavigableString 对象,你可以显式地将它转换为 unicode 字符串。

>>> soup.p.string

u'\u5982\u4f55\u4f7f\u7528BeautifulSoup'

>>> type(soup.p.string)

>>> unicode_str = unicode(soup.p.string)

>>> unicode_str

u'\u5982\u4f55\u4f7f\u7528BeautifulSoup'

基本概念介绍完,现在可以正式进入主题了,如何从 HTML 中找到我们关心的数据?BeautifulSoup 提供了两种方式,一种是遍历,另一种是搜索,通常两者结合来完成查找任务。

遍历文档树

遍历文档树,顾名思义,就是是从根节点 html 标签开始遍历,直到找到目标元素为止,遍历的一个缺陷是,如果你要找的内容在文档的末尾,那么它要遍历整个文档才能找到它,速度上就慢了。因此还需要配合第二种方法。

通过遍历文档树的方式获取标签节点可以直接通过 .标签名的方式获取,例如:

获取 body 标签:

>>> soup.body

\n

BeautifulSoup

\n

\u5982\u4f55\u4f7f\u7528BeautifulSoup

\n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值