0x1 工具准备
工欲善其事必先利其器,爬取语料的根基便是基于python。
我们基于python3进行开发,主要使用以下几个模块:requests、lxml、json。
简单介绍一个各模块的功能
01|requests
requests是一个Python第三方库,处理URL资源特别方便。它的官方文档上写着大大口号:HTTP for Humans(为人类使用HTTP而生)。相比python自带的urllib使用体验,笔者认为requests的使用体验比urllib高了一个数量级。
我们简单的比较一下:
urllib:
1import urllib2
2import urllib
3
4URL_GET = "https://api.douban.com/v2/event/list"
5#构建请求参数
6params = urllib.urlencode({'loc':'108288','day_type':'weekend','type':'exhibition'})
7
8#发送请求
9response = urllib2.urlopen('?'.join([URL_GET,'%s'])%params)
10#Response Headers
11print(response.info())
12#Response Code
13print(response.getcode())
14#Response Body
15print(response.read())
复制代码
requests:
1import requests
2
3URL_GET = "https://api.douban.com/v2/event/list"
4#构建请求参数
5params = {'loc':'108288','day_type':'weekend','type':'exhibition'}
6
7#发送请求
8response = requests.get(URL_GET,params=params)
9#Response Headers
10print(response.headers)
11#Response Code
12print(response.status_code)
13#Response Body
14print(response.text)复制代码
我们可以发现,这两种库还是有一些区别的:
1. 参数的构建:urllib需要对参数进行urlencode编码处理,比较麻烦;requests无需额外编码处理,十分简洁。
2. 请求发送:urllib需要额外对url参数进行构造,变为符合要求的形式;requests则简明很多,直接get对应链接与参数。
3. 连接方式:看一下返回数据的头信息的“connection”,使用urllib库时,"connection":"close",说明每次请求结束关掉socket通道,而使用requests库使用了urllib3,多次请求重复使用一个socket,"connection":"keep-alive",说明多次请求使用一个连接,消耗更少的资源
4. 编码方式:requ