上一篇分享了正则表达式的使用,相信大家对正则也已经有了一定的了解。它可以针对任意字符串做任何的匹配并提取所需信息。
但是我们爬虫基本上解析的都是html或者xml结构的内容,而非任意字符串。正则表达式虽然很强大灵活,但是对于html这样结构复杂的来说,写pattern的工作量会大大增加,并且有任意一处出错都得不到匹配结果,比较麻烦。
本篇将介绍一款针对html和xml结构,操作简单并容易上手的解析利器—BeautifulSoup。
BeautifulSoup的介绍
第一次使用BeautifulSoup的时候就在想:这个名字有什么含义吗?美味的汤?于是好信也在网上查了一下。
来看,官方文档是这么解释的:
“
BeautifulSoup: We called him Tortoise because he taught us”
意思是我们叫他乌龟因为他教了我们,当然这里Tortoise是Taught us的谐音。BeautifulSoup这个词来自于《爱丽丝漫游仙境》,意思是“甲鱼汤”。上面那个官方配图也是来自于《爱丽丝漫游仙境》,看来是没跑了,估计是作者可能很喜欢这部小说吧,因而由此起了这个名字。
好,让我们看看真正的BeautifulSoup是什么?
BeautifulSoup是Python语言中的模块,专门用于解析html/xml,非常适合像爬虫这样的项目。它有如下几个使其强大的特点:
它提供了几个超级简单的方法和Pythonic的语句来实现强大的导航、搜索、修改解析树的功能。
它会自动把将要处理的文档转化为Unicode编码,并输出为utf-8的编码,不需要你再考虑编码的问题。
支持Python标准库中的HTML解析器,还支持第三方的模块,如 lxml解析器 。
BeautifulSoup的安装
目前BeautifulSoup的最新发型版本是BeautifulSoup4,在Python中以bs4模块引入。
博主使用的Python3.x,可以使用 pip3 install bs4 来进行安装,也可以通过官方网站下载来安装,链接:https://www.crummy.com/software/BeautifulSoup/,具体安装步骤不在此叙述了。
以为安装完了吗?还没有呢。
上面介绍BeautifulSoup的特点时说到了,BeautifulSoup支持Python标准库的解析器html5lib,纯Python实现的。除此之外,BeautifulSoup还支持lxml解析器,为了能达到更好的解析效果,建议将这两个解析器也一并安装上。
根据操作系统不同,可以选择下列方法来安装lxml:
$ apt-get install Python-lxml
$ easy_install lxml
$ pip install lxml
另一个可供选择的解析器是纯Python实现的 html5lib , html5lib的解析方式与浏览器相同,可以选择下列方法来安装html5lib:
$ apt-get install Python-html5lib
$ easy_install html5lib
$ pip install html5lib
下面列出上面提到解析器的使用方法。
解析器使用方法
Python标准库BeautifulSoup(markup, "html.parser")
lxml HTML解析器BeautifulSoup(markup, "lxml")
lxml HTML解析器BeautifulSoup(markup, ["lxml", "xml"])
BeautifulSoup(markup, "xml")
html5libBeautifulSoup(markup, "html5lib")
推荐使用lxml作为解析器,lxml是用C语言库来实现的,因此效率更高。在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定。
BeautifulSoup的文档对象创建
首先引入bs4库,也就是BeautifulSoup在Python中的模块。
from bs4 import BeautifulSoup
好了,我们来看一下官方提供的例子,这段例子引自《爱丽丝漫游记》。
html_doc ="""
The Dormouse's storyThe Dormouse's story
Once upon a time there were three little sisters; and their names were