本文主要是介绍HTML解析之Beautiful Soup,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
Beautiful Soup是一个用于从HTML和XML文件中提取数据的Python库。Beautiful Soup 提供一些简单的、函数用来处理导航、搜索、修改分析树等功能。Beautiful Soup模块中的查找提取功能非常强大,而且非常便捷,它通常可以节省程序员大量的工作时间。
Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档转换为UTF-8 编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup 就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
(1)Beautiful Soup的安装
Beautiful Soup 3已经停止开发,目前推荐使用的是Beautiful Soup 4,不过它已经被移植到bs4当中了,所以在导入时需要from bs4然后再导入Beautiful Soup。安装Beautiful Soup有以下三种方式:
方式一:如果您使用的是最新版本的Debian或Ubuntu Linux,则可以使用系统软件包管理器安装Beautiful Soup安装命令为:apt-get install python-bs4。
方式二:Beautiful Soup 4是通过PyPi发布的,在Windows系统下可以通过easy_install或pip来安装它。包名是beautifulsoup4,它可以兼容Python2和Python3。安装命令为:easy_install beautifulsoup4或者是pip install beautifulsoup4。
注意:在使用Beautiful Soup 4之前需要先通过命令pip install bs4进行bs4库的安装。
方式三:如果当前的Beautiful Soup不是您想要的版本,可以通过下载源码的方式进行安装,源码的下载地址为“https://www.crummy.com/software/BeautifulSoup/bs4/download/”,然后在控制台中打开源码的指定路径,输入命令“python setup.py install”即可,如图6所示。
图6 通过源码安装Beautiful Soup
Beautiful Soup支持Python标准库中包含的HTML解析器,但它也支持许多第三方Python解析器,其中包含lxml解析器。根据不同的操作系统,您可以使用以下命令之一安装lxml:
l apt-get install python-lxml:适用于Linux系统
l easy_install lxml:适用于Windows系统
l pip install lxml:适用于Windows系统
另一个解析器是html5lib,它是一个用于解析HTML的Python库,按照Web浏览器的方式解析HTML。您可以使用以下命令之一安装html5lib:
l apt-get install python-html5lib:适用于Linux系统
l easy_install html5lib:适用于Windows系统
l pip install html5lib:适用于Windows系统
在表2中总结了每个解析器的优缺点。
表2 解析器的比较
解 析 器 | 用 法 | 优 点 | 缺 点 |
Python标准库 | BeautifulSoup(markup, "html.parser") | Python标准库 执行速度适中 | (在Python 2.7.3或3.2.2之前的版本中)文档容错能力差 |
lxml的HTML解析器 | BeautifulSoup(markup, "lxml") | 速度快 文档容错能力强 | 需要安装C语言库 |
lxml的XML解析器 | BeautifulSoup(markup, "lxml-xml") BeautifulSoup(markup, "xml") | 速度快 唯一支持XML的解析器 | 需要安装C语言库 |
html5lib | BeautifulSoup(markup, "html5lib") | 最好的容错性 以浏览器的方式解析文档 生成HTML5格式的文档 | 速度慢,不依赖外部扩展 |
(2)Beautiful Soup的使用
Beautiful Soup安装完成以后,下面将介绍如何通过Beautiful Soup库进行HTML的解析工作,具体示例步骤如下:
1)导入bs4库,然后创建一个模拟HTML代码的字符串,代码如下:
from bs4 import BeautifulSoup # 导入Beautiful Soup库
# 创建模拟HTML代码的字符串
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
2)创建Beautiful Soup对象,并指定解析器为lxml,最后通过打印的方式将解析的HTML代码显示在控制台中,代码如下:
# 创建一个Beautiful Soup对象,获取页面正文
soup = BeautifulSoup(html_doc, features="lxml")
print(soup) # 打印解析的HTML代码
运行结果如图7所示。
图7 显示解析后的HTML代码
说明:如果将html_doc字符串中的代码,保存在index.html文件中,可以通过打开HTML文件的方式进行代码的解析,并且可以通过prettify()方法进行代码的格式化处理,代码如下:
# 创建Beautiful Soup对象打开需要解析的html文件
soup = BeautifulSoup(open('index.html'),'lxml')
print(soup.prettify()) # 打印格式化后的代码
这篇关于HTML解析之Beautiful Soup的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!