BeautifulSoup
如何使用BeautifulSoup
它由很多标签(Tag)组成,比如 html、head、title等等都是标签
一个标签对构成一个节点,比如 ...是一个根节点
节点之间存在某种关系,比如 h1 和 p 互为邻居,他们是相邻的兄弟(sibling)节点
h1 是 body 的直接子(children)节点,还是 html 的子孙(descendants)节点
body 是 p 的父(parent)节点,html 是 p 的祖辈(parents)节点
嵌套在标签之间的字符串是该节点下的一个特殊子节点,比如 “hello, world” 也是一个节点,只不过没名字。
构建一个 BeautifulSoup 对象需要两个参数,第一个参数是将要解析的 HTML 文本字符串,第二个参数告诉 BeautifulSoup 使用哪个解析器来解析 HTML。
解析器负责把 HTML 解析成相关的对象,而 BeautifulSoup 负责操作数据(增删改查)。“html.parser” 是 Python 内置的解析器,“lxml” 则是一个基于c语言开发的解析器,它的执行速度更快,不过它需要额外安装
通过 BeautifulSoup 对象可以定位到 HTML 中的任何一个标签节点。
from bs4 import BeautifulSoup
text = """
hello, worldBeautifulSoup
如何使用BeautifulSoup
第二个p标签
"""
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'
遍历文档树,顾名思义,就是是从根节点 html 标签开始遍历,直到找到目标元素为止,遍历的一个缺陷是,如果你要找的内容在文档的末尾,那么它要遍历整个文档才能找到它,速度上就慢了。因此还需要配合第二种方法。
通过遍历文档树的方式获取标签节点可以直接通过 .标签名的方式获取,例如:
获取 body 标签:
>>> soup.body
\nBeautifulSoup
\n\u5982\u4f55\u4f7f\u7528BeautifulSoup
\n