python网络数据采集——网络连接

初识urllib

要采集信息,首先你需要将html文件抓取到本地,python中使用urllib这个包来进行网络连接,并且进行html的抓取,如果是python2.x版本,使用的是urllib2这个包

下面贴出一段代码,读者可自行运行:

1
2
3
4
5
6
#! /usr/local/bin/python3
# encoding:utf-8
from urllib.request import urlopen

html = urlopen("http://pythonscraping.com/pages/page1.html")
print(html.read())

运行BeautifulSoup

BeautifulSoup是第三方的python模块,所以需要进行安装,在此只介绍macOS系统的下载方式:

1
2
3
4
5
6
7
8
9
10
python中一般使用pip来下载第三方的依赖包
$sudo easy_install pip 首先确保你的系统中有pip命令
$pip install beautifulsoup4 即可下载

如果使用的是python3.x版本
$pip3 install beautifulsoup4 需要在pip后面加上数字3

一般macOS系统自带的是python2.x,在这里推荐使用brew来下载python3
$brew search python
$brew install python3 即可

BeautifulSoup在代码中的作用相当于html解析器,然后读者可以通过该模块的方法来获取一些html中的标签。在这里贴出BeautifulSoup的代码:

1
2
3
4
5
6
7
8
9
#! /usr/local/bin/python3
# encoding:utf-8

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://pythonscraping.com/pages/page1.html")
bsObj = BeautifulSoup(html, "html.parser")
print(bsObj.h1)

BeautifulSoup比较老的版本构造时不需要传入”html.parser” 参数,新的版本中,虽然结果仍然打印了出来,但是在运行过程中会报错。html.parser 是为了告诉BeautifulSoup 我使用的是 html 解析器。

读者可以参考官方手册了解更过BeautifulSoup的知识点。

可靠的网络连接

像上面写的代码,很有可能抛出异常,谁也不知道这个url是否可靠,如果服务器宕机了怎么办?等等问题,都会使得程序终止。

想象一下,你的爬虫在晚上执行,你想早上起来查看收集的数据,但是由于中间的错误,导致之后的程序没有执行,你不得不再等待一天的时间。

其实说了这么多,就是在代码层面中捕获异常。可靠的网络连接,要保证程序在运行过程中,即使中途遇到了错误,也能保证余下的代码可执行。大家参考下面的代码来发现不同点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from urllib.request import urlopen
from urllib.request import HTTPError
from bs4 import BeautifulSoup

def get_h1(url):
try:
html = urlopen(url)
except HTTPError as e:
return None
else:
try:
bsObj = BeautifulSoup(html, "html.parser")
h1 = bsObj.h1
except AttributeError as e:
return None

return h1


if __name__ == '__main__':
h1 = get_h1("http://pythonscraping.com/pages/page1.html")
print(h1)

上面这段代码使用了python中经典的try…exception…else的格式,这样保证了即使发生了异常,也能保证else中的代码被执行。在python中获取异常可以使你的代码更加健壮,也是一个好的习惯。

显示 Gitment 评论