日拱一卒|数据挖掘012
Python 提供了很多模块来支持 HTTP 协议的网络编程,urllib、urllib2、urllib3、httplib、httplib2,都是和 HTTP 相关的模块,看名字觉得很反人类,更糟糕的是这些模块在 Python2 与 Python3 中有很大的差异,如果业务代码要同时兼容 2 和 3,写起来会让人崩溃(Python之禅刘志军)。
幸运地是后来有了一个非常惊艳的 HTTP 库 requests。它实现了 HTTP 协议中绝大部分功能,提供的功能包括 Keep-Alive、连接池、Cookie持久化、内容自动解压、HTTP代理、SSL认证、连接超时、Session等很多特性,最重要的是它同时兼容 python2 和 python3。
在介绍之前,如果您有时间,建议看看 关于爬虫,你需要了解的HTTP协议 因为requests库是一个实现HTTP协议的python库。
本篇推送涉及的代码链接:https://github.com/piyixiaeco/daily-code/blob/master/requests.ipynb
首先pip install requests
安装requests库(如果使用anaconda,因为已经包含了,就不需要安装)
以http://www.baidu.com/
为例
HTTP协议中最常用的请求方法有:GET、POST、PUT、DELETE。GET 方法用于从服务器获取资源,90%的爬虫都是基于GET请求抓取数据。
请求返回的 Response 对象,它是对 HTTP 协议中服务端返回给浏览器的响应数据的封装,响应的中的主要元素包括:状态码、原因短语、响应首部、响应体等等,这些属性都封装在Response 对象中。
2响应首部和请求首部类似,用于对响应内容的补充,在首部里面可以告知客户端响应体的数据类型是什么?响应内容返回的时间是什么时候,响应体是否压缩了,响应体最后一次修改的时间等等。
3 4对于Chrome浏览器右键点击“检查”(Ctrl+Shift+I),可以看到响应头、请求头。
5
requests 除了支持 GET 请求外,还支持 HTTP 规范中的其它所有方法,包括 POST、PUT、DELTET、HEADT、OPTIONS方法。
6 7定制请求头
requests 可以很简单地指定请求首部字段 Headers,比如有时要指定 User-Agent 伪装成浏览器发送请求,以此来蒙骗服务器。直接传递一个字典对象给参数 headers 即可。
构建请求查询参数
很多URL都带有很长一串参数,我们称这些参数为URL的查询参数,用”?”附加在URL链接后面,多个参数之间用”&”隔开。
构建 POST 请求数据
requests 可以非常灵活地构建 POST 请求需要的数据,如果服务器要求发送的数据是表单数据,则可以指定关键字参数 data,如果要求传递 json 格式字符串参数,则可以使用json关键字参数,参数的值都可以字典的形式传过去。
Response中的响应体
HTTP返回的响应消息中很重要的一部分内容是响应体,响应体在 requests 中处理非常灵活,与响应体相关的属性有:content、text、json()。
content 是 byte 类型,适合直接将内容保存到文件系统或者传输到网络中
11
text 是 str 类型,比如一个普通的 HTML 页面,需要对文本进一步分析时,使用 text。
12
如果使用第三方开放平台或者API接口爬取数据时,返回的内容是json格式的数据时,那么可以直接使用json()方法返回一个经过json.loads()处理后的对象。
13
代理设置
当爬虫频繁地对服务器进行抓取内容时,很容易被服务器屏蔽掉,因此要想继续顺利的进行爬取数据,就需要使用代理。
超时设置
requests 发送请求时,默认请求下线程一直阻塞,直到有响应返回才处理后面的逻辑。如果没有显式指定了 timeout 值,requests 是不会自动进行超时处理的。如果遇到服务器没有响应的情况时,整个应用程序一直处于阻塞状态而没法处理其他请求。
Session
HTTP协议是一中无状态的协议,为了维持客户端与服务器之间的通信状态,使用 Cookie 技术使之保持双方的通信状态。
有些网页是需要登录才能进行爬虫操作的,而登录的原理就是浏览器首次通过用户名密码登录之后,服务器给客户端发送一个随机的Cookie,下次浏览器请求其它页面时,就把刚才的 cookie 随着请求一起发送给服务器,这样服务器就知道该用户已经是登录用户。
16构建一个session会话之后,客户端第一次发起请求登录账户,服务器自动把cookie信息保存在session对象中,发起第二次请求时requests 自动把session中的cookie信息发送给服务器,使之保持通信状态
参考资料:
1.Python爬虫准备:认识urllib/urllib2与requests
2.优雅的HTTP库requests
3.Python爬虫知识点梳理
4. requests库初使用
公众号推荐
Python之禅
网友评论