对BeautifulSoup的介绍
“Beautiful Soup, so rich and green
Waiting in a hot tureen
Who for such dainties would not stoop
Soup of the evening, beautiful Soup!”
BeautifulSoup (以下用BS简称来代替)试图去做一些有意义的事情;它通过整理很差的HTML以及向我们以XML格式来展示Python对象,从而帮助格式化和组织凌乱的网页。
安装 BS
由于 BS库不是Python自带的库,我们必须按转它。在这本书中,我们会使用 BS 4 库(简称 BS4)。关于安装 BS4 的完整说明可以在 Crummmy.com 中发现。对于Linux的基本方法是
$sudo apt-get install python-bs4
对于Mac:
$sudo easy_install pip
这个安装了Python包的管理器 pip。然后,运行下面的命令去安装BS4库:
$pip install beautifulsoup4
再次需要注意的是,如果你同时使用了 Python 2.x 和 3.x,你需要明确指出 python3:
python3 myScript.py
也需要确保安装包的时候使用这个,否则包有可能安装在Python 2.x,而不是Python 3.x:
$sudo python3 setup.py install
如果使用pip,你也可以调用 pip3去安装Python 3.x的版本:
$pip3 install beautifulsoup4
安装结果为:
在Windows环境下安装包的过程与在Mac和Linux下几乎一致。下载最近的BS4版本,然后解压,运行:
> python setup.py install
做完这些之后,BS现在会是Python库。可以通过打开Python终端和输入它来测试是否在库中:
$python
> from bs4 import Beautiflusoup
如果没有报错的话,就表示已经安装完成。
除此之外,也有在Windows环境下的 pip 安装包,所以我们可以很容易地安装、管理包:
> pip install beautifulsoup4
利用虚拟环境来保持库的互不干扰
如果你试图运行多个Python项目,或者需要简单地方式将带有库的项目捆绑在一起,或者你担心安装库之间的潜在的冲突,你可以安装一个Python虚拟环境来使每个项目分离开来,便于管理。
当你在没有虚拟环境下安装一个Python库,你是在全局安装它。这要求你是一个管理者,或者作为root来运行,结果使得Python库存在于每个用户和每个项目上。幸运的事,创造一个虚拟环境是一件很容易的事:
$ virtualenv scrapingEnv
这个创造了一个名为scrapingEnv的新的虚拟环境,可以使用下面的命令来激活它:
$ cd scrapingEnv
source bin/activate
当你激活了它之后,你会在命令行中看见这个环境的名字,提醒你正在它上面工作。你安装的任意一个库都仅会在该虚拟环境下实现。
在这个新构造的scrapingEnv环境下工作,我可以安装和使用BeautifulSoup,比如:
(scrapingEnv) ryan$ pip install beautifulsoup4
(ScrapingEnv) ryan$ python
> from bs4 import BeautifulSoup
>
通过deactivate
命令来退出虚拟环境,然后,我将没有任何权限来使用在虚拟环境下安装的库:
(scrapingEnv) ryan$ deactivate
ryan$ python
from bs4 import BeautifulSoup
Traceback (most recent call last)
File "<stdin>", line 1, in <module>
ImportError: No module named bs4
将所有的库与项目分离使得我们很容易能够将整个环境文件夹压缩打包,然后传给其他人。只要这些人在电脑上具有相同的Python版本,你的代码就会在虚拟环境下直接工作,而无需他们安装任意一个库。
尽管在这本书的示例中,我们没有明确让你使用一个虚拟的环境,你都可以应用虚拟环境来使用它。特别注意的事,我们安装的 Python 3.6.0 环境下,并没有virtualenv命令,因此我们需要安装该库,代码为:
$ pip3 install virtualenv
之后,我们就可以使用virtualenv
了。
运用 BS
在BS库中最常见的对象是BS对象。让我们用本章开头的例子来见识一下它的应用:
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen(http://www.pythonscraping.com/pages/page1.html)
bsObj = BeautifulSoup(html.read())
print(bsObj.h1)
输出为:
<h1> An Interesting Title </h1>
如果我们选择输出 print(bsObj)
,我们将得到
通过上述的代码,HTML内容被转化为了一个BeautifulSoup对象,其结构为: