Requests库
这篇文章主要介绍了pythonrequest(python request 模块)详细介绍,帮助大家利用request 模块学习爬虫,感兴趣的朋友可以了解下。
requests是通过urllib3实现自动发送HTTP/1.1请求,它能轻松的实现cookies,登陆验证,代理设置等操作。由于Python内置的urllib模块,用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。一个大牛厌烦了urllib的使用,于是决心自己写一个自动发起HTTP请求的库(据说就写了几个小时),大牛就写完了,它就是Requests库。看一下文档的介绍,很狂有没有,让HTTP服务人类。
Requests库文档简介
Requests库发出请求
requests.method(url,**kwargs):构造并发送一个request,返回一个response对象
参数:
- method: request对象的方法(POST,GET)
- url: request对象的URL
- params:可选的,要在查询字符串中发送的字典或字节request
- data:可选的,字典或元祖列表以表单编码,字节或类似文件的对象在主体中发送[(key,value)]
- json:可选的,一个json可序列化的python对象,在主体中发送request
- headers:可选的,用于编写http头信息
- cookies:可选,用dict或cookieJar对象发送Cookies
- file:可选,用于多部分编码上传的字典,可以是多元祖,其中是定义给定文件的内容类型的字符串,以及包含问文件添加的额外头文件的类字典对象
- auth:可选,身份验证元祖,自定义http身份验证
- timeout:可选,发送等待请求数据的超时时间(float/tuple),设置为元祖即为练级connect和read读取超时,如果设置为None即为永久等待
- allow_redirects:布尔值,可选,启用或禁用GET,OPTIONS,POST,PUT,PATCH,DELETE,HEAD重定向,默认为true
- proxies:可选,字典映射协议到代理的URL
- verify:可选,可以是布尔值,可以指定验证服务器的TLS证书路径,默认为true
重点说说一下几个属性:
- params和data,这两个数据形式相同,但params在get请求中使用,data在post请求中使用。
- headers,稍微仔细的都可以看出昨天访问百度的UA为Requests库,如果我们想告诉服务器我们来自其他浏览器呢?重定义headers就好,代码在下方,这样就可以让服务器以为爬虫发出的请求来自WIN10系统的chrome浏览器(其实没有这么简单,服务器一般会从多个维度来判断你是个正常用户,但至少UA这关你过了)。
import requests headers=”Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36″ response = requests.get(‘http://www.baidu.com’,headers=headers
昨天的图再用一次
请求响应
class response :该Response对象包含服务器对HTTP请求的响应信息
该对象包含的属性和方法:
- content:响应的内容,以字节为单位。
- cookies :服务器发回的Cookies CookieJar。
- encoding :编码以在访问r.text时进行解码。
- headers :不区分大小写的响应头字典。例如,headers[‘content-encoding’]将返回’Content-Encoding’响应头的值。
- is_redirect:如果此响应是可以自动处理的格式良好的HTTP重定向,则为真。
- json(** kwargs ):返回响应的json编码内容
- links:返回解析的响应头部链接
- ok:如果status_code小于400 则返回True,否则返回False
- status_code:整数响应HTTP状态的代码,例如404或200。
- text:响应的内容,以unicode表示。
- url:响应的最终URL位置
还是挑些重要的讲:
- response.text和response.content都是响应的正文,但是一个是unicode,一个是字节(不懂得的最好百度下,科班出身必学必回)
- response.encoding,很多时候输出Response.text为乱码,确定下这里的格式,一般为UTF-8
- response.status_code是响应状态码,很多时候我们可以通过判断是否为对应值确定爬取是否成功并做响应处理(有些网站没爬到也給200,是个坑)
- response.url请求响应的URL,懂得都懂。
写在最后:Requests库确实蛮好用的,笔者的很多业务都基于Requests库,没有Scrapy庞大,写多了封装好的功能,传参就能用,可自定义程度比较高),很多乱七八糟的业务可以自己写,太多依赖于Scrapy反而会束手束脚。