
2.6 爬虫常用类库1:Python中的HTTP基本库urllib
我们已经了解到,爬虫简单来说就是发送请求并获取信息。道理很简单,但怎么发送请求呢?幸运的是,使用Python标准库和第三方库都能实现此功能。接下来我们将介绍这些标准库及第三方库。urllib是Python内置的标准库,无须安装即可使用。
2.6.1 发送请求
基本的网络请求方法为urlopen,方法原型为:

参数说明如下。
- url:访问的地址,也可以是一个Request。
- data:若指定data值,则变为POST请求(注意:data传递的参数需要转为bytes,可通过urllib.parse.urlencode进行转换)。
- timeout:设置网站的请求超时时间。
- cafile:在访问HTTPS网站时,可使用此参数指定单个CA证书文件。
- capath:在访问HTTPS网站时,可使用此参数指定CA证书文件路径。
- cadefault:此参数已废弃。
- context:必须指定为描述SSL选项的ssl.SSLContext实例。
urlopen()返回对象可用的方法如下。
- read():返回响应信息。
- geturl():返回响应的网址。
- getcode():返回响应码。
- info():返回页面元信息,比如头部信息等。
打开一个无参数请求,默认为GET请求:

如果发送的GET请求有参数,就需要用到urllib.parse中的urlencode将请求参数进行URL编码,拼接之后再进行发送:

如果要发送POST请求,就需要加上data参数:

2.6.2 使用Cookie
Cookie是当浏览某网站时,网站存储的信息文件,它记录了用户的ID、密码、浏览记录、浏览时间等信息。当同一用户再次访问该网站时,网站通过读取Cookie,获取用户的相关信息,比如用户名、密码,用于自动登录。Cookie在爬虫操作中很常用,特别是针对一些需要登录才能抓取信息的网站的抓取工作。使用urllib操作网站Cookie需要用到urllib.request.HTTPCookieProcessor(cookie)。使用Cookie需要创建一个opener。在Python的http包中包含cookiejar模块,用于提供对Cookie的支持。http.cookiejar功能强大,我们可以利用本模块的CookieJar类的对象来捕获Cookie,并在后续连接请求时重新发送,比如可以实现模拟登录功能。使用方法如下:
【示例2-7】urllib获取Cookie

输出结果如图2.12所示。

图2.12 获取Cookie
【示例2-8】urllib保存Cookie

保存结果如图2.13所示。

图2.13 保存Cookie
【示例2-9】urllib使用Cookie

运行结果如图2.14所示。

图2.14 使用Cookie