大家都知道BeautifulSoup是一个第三方python库,用于从HTML或XML文档中提取数据,与re正则相比,具有简单、便利、高效的特点,在解析数据方面能够起到相互补充的作用。
初学BeautifulSoup的小伙伴一定也遇到下面代码:
soup = BeautifulSoup(html, 'html.parser')
soup = BeautifulSoup(html, 'lxml')
这两段代码都是解析 html 数据作用,但‘lxml’ 和 ‘html.parser’ 又有什么区别呢?小编带你一起了解一下。
使用BeautifulSoup进行文档解析时需要解析器的配合,‘lxml’ 和 ‘html.parser’就是两种解析器。html.parser是python标准库中的解析器,我们可以直接使用。当然,Python也支持第三方解析器,例如 lxml 等,只是需要单独进行安装。
BeautifulSoup 支持的常见解析器有四种: html.parser,lxml,lxml-xml,html5lib。
这四种解析器各有优劣,下面是他们特点对比图:
由于lxml更高的效率,因此推荐使用lxml作为解析器。
一般我们安装BeautifulSoup包的时候会自带这几种解析器,但如果你的包里没有lxml或html5lib,可以单独在terminal(我用的pycharm)中安装,或者再python环境中安装也可以。
pip install lxml
pip install html5lib
下面我们来看一个例子吧!
先引入一个 html (这是我随便粘贴的一段网页源代码)。
html =
'<!DOCTYPE html>
<html lang="en">
<head>
<title>Exemple</title>
</head>
<body>
<div class="catheader">
<div class="top-left">
<a href="https://www.51shucheng.net/"><img src="https://www.51shucheng.net/images/logo.png" alt="无忧书城"
title="无忧书城" border="0" height="60" width="130"></a>
</div>
<div class="top-right">
<div class="nav-top">
<a href="https://www.51shucheng.net/wuxia">武侠小说</a> | <a href="https://www.51shucheng.net/yanqing">言情小说</a> | <a
href="https://www.51shucheng.net/qingchun">青春文学</a> | <a href="https://www.51shucheng.net/kehuan">科幻小说</a> | <a
href="https://www.51shucheng.net/guanchang">官场小说</a> | <a href="https://www.51shucheng.net/daomu">盗墓小说</a> | <a
href="https://www.51shucheng.net/zhentan">侦探小说</a> | <a href="https://www.51shucheng.net/wangluo">网络小说</a> | <a
href="https://www.51shucheng.net/yingshi">影视小说</a> | <a href="https://www.51shucheng.net/xiandai">现代文学</a> | <a
href="https://www.51shucheng.net/fenlei">更多图书分类</a>
</div>
</div>
</div>
</body>
</html>'
然后导入BeautifulSoup包,并对数据进行解析,并提取数据。
# 导入 BeautifulSoup 包
from bs4 import BeautifulSoup
# 数据解析
soup = BeautifulSoup(html, 'html.parser)
# 提取数据中信息
a_list = soup.find_all('a')
# 打印数据
for a in a_list:
print(a)
关于BeautifulSoup使用部分这里就不多叙述了。最后提示一点,一般解析本地文件使用html.parser解析器更好用一些,如上我用的就是html.parser;如果要是解析网页文件,比如从网页上抓取下来得信息,就需要用 lxml 解析器,效率会更高一些。当然,lxml 也可以解析本地文件。综上,推荐使用 lxml 解析器!