【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
广东职业技术学院 欧浩源 2017-10-15
1、引言
实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求。urllib是目前最常用的做法,然而Requests会比urlib更加方便,能够让人以更加简单的方式获取网络资源。
2、什么是Requests?
Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库。它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求。
Requests对象有Get、Post、Put、Delete、Head、Options等HTTP方法,使用起来非常简单。对于WEB系统,一般只支持Get和Post方法。在网络爬虫中,Get方法最常用。在本文中也重点讨论该方法相关的应用,其他方法即更加详细的使用,见用户手册:
http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
3、发起网络请求
使用Requests的Get方法发送网络请求非常简单。
首先,导入Requests模块:
import requests
然后,通过URL向网页发起请求:
res = requests.get('http://www.gdptc.cn/')
这时,我们有一个名为res的Requests对象,从这个对象中我们可以获取所有我们想要的信息,例如将网页的URL打印出来。
print(res.url)
4、获取响应内容
我们能读取服务器响应的内容。Requests会自动解码来自服务器的内容,大多数unicode字符集都能被无缝地解码。
请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。当你访问res.text 之时,Requests会使用其推测的文本编码。你可以找出 Requests使用了什么编码,并且能够使用res.encoding属性来改变它。
如果你改变了编码,每当你访问 res.text ,Request 都将会使用res.encoding的新值。
5、响应头的内容
服务器响应头以一个Python字典的形式来表示。这个字典比较特殊,它是仅为HTTP头部而生的。
res.headers的结果是:
{
'Content-Length' : '39037'
'X-Powered-By' : 'ASP.NET'
'Date' : 'Sat, 14 Oct 2017 13:58:41 GMT'
'X-AspNet-Version' : '2.0.50727'
'Cache-Control' : 'private'
'Content-Type' : 'text/html; charset=utf-8'
'Server' : 'Microsoft-IIS/7.5'
}
通过这个服务器的响应头,我们可以知道服务器的一些基本数据信息。根据 RFC2616, HTTP头部是大小写不敏感的。因此,我们可以使用任意大写形式来访问这些响应头字段。例如我们想查看服务器的编码和服务器型号:
6、定制请求头
如果你想为请求添加HTTP头部,只要简单地传递一个dict给headers参数就可以了。很多服务器对于非正常的请求往往会拒绝,这时候就需要给网络请求穿上合法的外衣,而伪装请求头部则是最常用的手段。
用户代理User Agent,是HTTP协议中的一部分,属于请求头的组成部分。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核等信息的标识。通过添加合法浏览器的UA信息,可以将爬虫的请求伪装成浏览器的请求。
例如,IE9浏览器的User Agent为:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;
这些常用的浏览器UA在网上都可以查到。
如果要模拟IE9浏览器访问百度网站,可以这样实现:
Requests不会基于定制 header 的具体情况改变自己的行为。只不过在最后的请求中,所有的header信息都会被传递进去。
7、小结
Requests的用法远不止此,但作为网络爬虫的入门应用,上述知识基本足够。向服务器发送请求的方法也不止一种,怎么熟悉怎么用,怎么方便怎么用,作为入门,多了解,多学习,多练习,多应用才是正道。