通过cmd安装 bs4
pip install beautifulsoup4
调用prettify()函数美化输出HTML源代码
import requests
from bs4 import BeautifulSoup
r = requests.get("http://www.baidu.com")
soup = BeautifulSoup(r.text, "html.parser") # 对html内容解析
print(soup.prettify()) # 美化输出
BeautifulSoup(参数1:源代码, 参数二: 解析器)
解析器 | 来源 | 特点 |
---|---|---|
html.parser | bs4库 | 1、Python的内置标准库 2、执行速度适中 3、文档容错能力强 |
lxml | pip install lxml | 1、速度快 2、文档容错能力强 |
xml | pip install lxml | 1、速度快 2、唯一支持XML的解析器 |
html5lib | pip install html5lib | 1、最好的容错性 2、以浏览器的方式解析文档 3、生成HTML5格式的文档 |
可以通过对BeautifulSoup对象的调用访问文档内的标签
print(soup.p) # 对soup对象的第一个p标签的调用
属性 | 作用 |
---|---|
contnet | 子节点的列表,将所有儿子节点存入列表 |
children | 子节点的迭代类型,与’.contnet’类似,用于循环遍历儿子节点 |
descendants | 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历 |
使用
import requests
from bs4 import BeautifulSoup
r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
print("打印html标签内的所有字典点个数:" + str(len(soup.html.contents)), "打印其中第二个标签:" + soup.html.contents[1])
print("遍历所有子标签") # 这里的子标签中还包含了 '\n'
for child in soup.html.children:
print(child)
print("遍历包括的所有标签") # 类似与深度优先遍历的方法
for child in soup.html.descendants:
print(child)
属性 | 作用 |
---|---|
.parent | 返回节点的父亲节点 |
.parents | 节点祖先的迭代类型,用于遍历祖先节点 |
print("打印节点p的父亲节点:", soup.p.parent)
print("遍历访问节点p的祖先节点") # 类似于递归到终止条件时的逐步返回
for par in soup.p.parents:
if par is None: # 遍历到文档本体时
print(par)
else:
print(par.name)
属性 | 作用 |
---|---|
next_sibling | 返回按照HTML文本顺序的下一个平行标签 |
previous_sibling | 返回按照HTML文本顺序的上一个平行标签 |
next_siblings | 返回按照HTML文本顺序的后续所有平行标签的迭代类型 |
previous_siblings | 返回按照HTML文本顺序的前续所有平行标签的迭代类型 |
调用方法和上面两种差不多, 也比较好理解,这里就不多说了