1 第一个网络爬虫 (2)

对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对象,其结构为:

html<html><head>...</head><body>...</body></html>head<head><title>AUsefulPage</title></head>title<title>AUsefulPage</title>body<body><h1>AnInt...</h1><div>Loremip...</div></body>h1<h1>AnInterestingTitle</h1>div<div>LoremIpsumdolor...</div>
...\\ & - - - \textbf{head} \rightarrow A Useful Page \\ & \qquad - - - \textrm{title} \rightarrow A Useful Page \\ & - - - \textbf{body} \rightarrow

An Int...

Lorem ip...
\\ & \qquad - - - \textbf{h1} \rightarrow

An Interesting Title

\\ & \qquad - - - \textbf{div} \rightarrow
Lorem Ipsum dolor...
\end{aligned} \end{equation}

注意到 我们从该页面抽取的 <h1> 标签是嵌套为两层的BS对象结构 ( htmlbodyh1 )。然而,我们从这个对象直接提取它的时候,我们可以直接调用 <h1> 标签:

bsObj.h1

与此同时,下面的任意一个命令都可以产生相同的输出:

bsObj.html.body.h1
bsObj.body.h1
bsObj.html.h1

我们希望对于BS的小小的尝试能够使你对这个库的强有力且简单有一个明确的想法。只要一段信息有一个明确的标签来定位它,则该信息都可以被提取出来。在第三章中,我们会继续深入了解更加复杂的BS函数调用,以及看看正常的表达式,他们如何被用来提取网页的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值