[TOC]
About
安装
python
pip install beautifulsoup4 # 目前更新到了第4版
解析器
html.parser
html.parser
是Python内置的标准库。
下载
无需下载。
使用
python
from bs4 import BeautifulSoup
html = "<h1>html.parser</h1>"
soup = BeautifulSoup(html, 'html.parser')
print(soup.find(name='h1').text) # html.parser
优势
Python内置标准库,执行速度适中,文档容错能力强。
劣势
Python2.7.3 或者Python3.2.2前的版本中文容错能力差。
lxml
html.parser
是Python内置的标准库。
下载
pip install lxml
使用
python
from bs4 import BeautifulSoup
html = "<h1>lxml</h1>"
soup = BeautifulSoup(html, 'lxml')
print(soup.find(name='h1').text) # lxml
优势
速度快,文档容错能力强。
劣势
需要安装C语言库。
xml
html.parser
是Python内置的标准库。
下载
pip install lxml
xml
解析器属于lxml
包,所以只要下载了lxml
,就无需再下载xml
。
使用
python
from bs4 import BeautifulSoup
html = "<h1>xml</h1>"
soup = BeautifulSoup(html, 'xml')
print(soup.find(name='h1').text) # xml
优势
速度快,唯一支持XML的解析器
劣势
需要安装C语言库。
html5lib
html.parser
是Python内置的标准库。
下载
pip install html5lib
使用
python
from bs4 import BeautifulSoup
html = "<h1>html5lib</h1>"
soup = BeautifulSoup(html, 'html5lib')
print(soup.find(name='h1').text) # html5lib
优势
最好的容错性,以浏览器的方式解析文档,生成HTML5格式的文档。
python
from bs4 import BeautifulSoup
html = '<h1>text</p>'
soup = BeautifulSoup(html, 'html.parser')
print(soup) # <h1>text</h1>
soup = BeautifulSoup(html, 'lxml')
print(soup) # <html><body><h1>text</h1></body></html>
soup = BeautifulSoup(html, 'html5lib')
print(soup) # <html><head></head><body><h1>text<p></p></h1></body></html>
由上例可以看到,只有html5lib
解析器会补全错误的标签。
劣势
速度慢,不依赖外部扩展。
使用
在与脚本文件同级目录,有这样的一个HTML文件,我们以这个为测试对象。
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>BeautifulSoup4</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-3">
<p style="color: red;">p1</p>
<p style="font-size: 12px;">p2</p>
<p>p3</p>
</div>
<div class="col-md-4">
<a href="https://www.baidu.com">百度</a>
<img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1568638318957&di=1d7f37e7caece1c39af05b624f42f0a7&imgtype=0&src=http%3A%2F%2Fimg3.duitang.com%2Fuploads%2Fitem%2F201501%2F17%2F20150117224236_vYFmL.jpeg" alt="">
</div>
</div>
</div>
</body>
</html>
我们使用open
函数将HTML文本读出来,交给beautifulsopu
去解析处理。
python
from bs4 import BeautifulSoup
text = open('beautiful.html', 'r', encoding='utf-8').read()
soup = BeautifulSoup(text, 'lxml')
print(soup.prettify())
see also:lxml.html 中几种解析器的区别 | | | |