Beautiful Soup 4 怎么安装
本章节主要介绍beautifulsoup4怎么安装,以及解析器的安装教程。
安装 Beautiful Soup
如果你用的是新版的 Debain 或 ubuntu,那么可以通过系统的软件包管理来安装:
$ apt-get install Python-bs4
Beautiful Soup 4 通过 PyPi 发布,所以如果你无法使用系统包管理安装,那么也可以通过 easy_install
或 pip
来安装.包的名字是 beautifulsoup4
,这个包兼容 Python2 和 Python3.
$ easy_install beautifulsoup4
$ pip install beautifulsoup4
(在 PyPi 中还有一个名字是 BeautifulSoup
的包,但那可能不是你想要的,那是 Beautiful Soup3 的发布版本,因为很多项目还在使用 BS3, 所以 BeautifulSoup
包依然有效.但是如果你在编写新项目,那么你应该安装的 beautifulsoup4
)
如果你没有安装 easy_install
或 pip
,那你也可以 下载BS4的源码 ,然后通过 setup.py 来安装.
$ Python setup.py install
如果上述安装方法都行不通,Beautiful Soup 的发布协议允许你将 BS4 的代码打包在你的项目中,这样无须安装即可使用.
作者在 Python2.7 和 Python3.2 的版本下开发 Beautiful Soup, 理论上 Beautiful Soup 应该在所有当前的 Python 版本中正常工作
安装完成后的问题
Beautiful Soup 发布时打包成 Python2 版本的代码,在 Python3 环境下安装时,会自动转换成 Python3 的代码,如果没有一个安装的过程,那么代码就不会被转换.
如果代码抛出了 ImportError
的异常: “No module named HTMLParser”, 这是因为你在 Python3 版本中执行 Python2 版本的代码.
如果代码抛出了 ImportError
的异常: “No module named html.parser”, 这是因为你在 Python2 版本中执行 Python3 版本的代码.
如果遇到上述2种情况,最好的解决方法是重新安装 BeautifulSoup4.
如果在ROOT_TAG_NAME = u’[document]’代码处遇到 SyntaxError
“Invalid syntax”错误,需要将把 BS4 的 Python 代码版本从 Python2 转换到 Python3. 可以重新安装 BS4:
$ Python3 setup.py install
或在bs4的目录中执行Python代码版本转换脚本
$ 2to3-3.2 -w bs4
安装解析器
Beautiful Soup 支持 Python 标准库中的 HTML 解析器,还支持一些第三方的解析器,其中一个是 lxml .根据操作系统不同,可以选择下列方法来安装lxml:
$ apt-get install Python-lxml
$ apt-get install Python-lxml
$ apt-get install Python-lxml
另一个可供选择的解析器是纯Python实现的 html5lib , html5lib 的解析方式与浏览器相同,可以选择下列方法来安装 html5lib:
$ apt-get install Python-html5lib
$ apt-get install Python-html5lib
$ apt-get install Python-html5lib
下表列出了主要的解析器,以及它们的优缺点:
解析器 | 使用方法 | 优势 | 劣势 |
---|---|---|---|
Python标准库 | BeautifulSoup(markup, "html.parser")
|
|
|
lxml HTML 解析器 | BeautifulSoup(markup, "lxml")
|
|
|
lxml XML 解析器 |
|
|
|
html5lib | BeautifulSoup(markup, "html5lib")
|
|
|
推荐使用lxml作为解析器,因为效率更高. 在 Python2.7.3 之前的版本和 Python3 中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些 Python 版本的标准库中内置的 HTML 解析方法不够稳定.
提示: 如果一段 HTML 或 XML 文档格式不正确的话,那么在不同的解析器中返回的结果可能是不一样的,查看 解析器之间的区别 了解更多细节。