Python爬虫之Requests简介及各种请求方式与响应信息
一、Requests简介

urllib库参考:Python 爬虫之urllib库
Requests基于urllib用python语言编写,该模块主要用于发送HTTP请求,requests模块比urllib模块更简洁,是学习python爬虫时较好的http请求模块。
不是 python 的内置库,如果没有安装,可以安装先。
pip install requests
二、各种请求方式
requests提供了各种请求方式,每次调用requests进行请求后,会返回一个response对象,这个对象包含了具体的响应信息,响应信息如下:
1、基本Get 请求
import requests
x等于通过requests获取,请求的网址是http://www.baidu.com 。
print(x.status_code)
print(x.reason)
print(x.apparent_encoding)
print(x.text)
执行结果:
200
OK
utf-8
.....
请求 json 数据文件,返回 json 内容:
通过params参数传递一个字典内容,从而直接构造url
import requests
params = {
名字是张三,
'age': 100
}
x等于使用params参数向'http://httpbin.org/get'发送GET请求后得到的响应 。
print(x.url)
print(x.json())
执行结果:
这看起来像是一个网址链接:http://httpbin.org/get ,其中带有参数:name=zhangsan 以及 age=100 。
请提供完整准确的内容,以便我能按照要求进行改写。目前给出的内容不完整且存在乱码等情况。
抓取二进制数据
在上面的例子中,我们抓取的是网站的一个页面,它实际返回的是一个HTML文档。若想抓取图片、音频、视频等文件,需用到content,如此获取的数据是二进制数据。
如抓取百度logo图片:
import requests
x进行了请求操作,请求的目标地址是https://www.baidu.com/img/flexible/logo/pc/result.png 。
print(x.content)
执行结果:
这看起来是一串二进制数据,无法直接按照要求进行改写,因为它不是一个完整的、有实际意义可理解的句子表述,请你检查内容或提供更合适的文本以便准确改写 。
得到的是一串二进制乱码,若想得到图片,直接把它保存到本地就行。
import requests
x = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
打开文件名为'baidulogo.png'的文件,以二进制写入模式,将其赋值给变量f ,通过f进行后续操作 。
f.write(x.content)
执行后,在本地目录,可以看到图片已经下载
添加headers
有些网页,访问时必须借助headers。此时,只需把参赛内容传到headers参数里就行,如下所示:
import requests
headers = {
用户代理为,适用于苹果机,基于英特尔的苹果操作系统X 10_11_4,使用苹果webkit引擎537.36,类似KHTML,由谷歌浏览器52.0.2743.116渲染,使用Safari浏览器537.36 。
}
x等于发送一个GET请求到https://baidu.com/ ,并且设置请求头为headers 。
print(x.text)
2、基本POST请求
在爬虫里,还有一种较为常见的请求方式,那便是POST请求,它与GET用法相近 。
post() 方法能够发送POST请求,该请求会发往指定的url,其一般格式如下:
发出一个POST请求,请求的目标地址是url,请求中携带的数据是data,其内容为键值对key: value,请求中携带的JSON数据是json,其内容为键值对key: value,同时还带有参数args 。
import requests
数据等于,包含键值对的集合,其中键为“name”,值为“zhangsan”,另一个键为“age”,值为“100” 。
x等于向"http://httpbin.org/post"发送POST请求,其中data作为数据,
print(x.text)
执行结果:
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "100",
"name": "zhangsan"
},
"headers": {
"Accept": "*/*",
“Accept-Encoding”的值为“gzip”和“deflate” 。
"Content-Length": "21",
....
3、其他请求
其他请求可以自行测试,差不多用法。
r等于发送一个PUT请求到https://httpbin.org/put,请求中携带的数据是一个包含键值对的字典,键为key,值为value 。
r等于requests.delete,请求的目标地址是https://httpbin.org/delete 。
r等于对'https://httpbin.org/get'发送头部请求 ,
r等于对'https://httpbin.org/get'进行options请求的结果 。
三、requests 方法
requests 方法如下表:
import requests
# 发送请求
x等于使用requests库的request方法,发起一个针对https://httpbin.org/的get请求 。
# 返回网页内容
print(x.status_code)
执行结果:
200
设置请求头:
# 导入 requests 包
import requests
kw等于一个字典,其中键's'对应的值为'python教程' 。
# 设置请求头
请求头设置为,用户代理为,Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36
params接收查询参数,查询参数可以是字典或者字符串,若查询参数是字典类型,会自动转换为url编码,不需要使用urlencode()
发送一个GET请求到"https://httpbin.org" ,请求参数为kw ,请求头为headers ,并将响应结果赋值给response 。
# 查看响应状态码
print (response.status_code)
# 查看响应头部字符编码
print (response.encoding)
# 查看完整url地址
print (response.url)
查看响应内容,response.text返回的是Unicode格式的数据
print(response.text)
执行结果:
200
utf-8
这是一个网址链接,它指向https://httpbin.org/?s=python教程
httpbin.org
....
四、requests其他高级用法
1、文件上传
实现方法与其他参数相似,同样是构造一个字典,接着通过files参数进行传递。
import requests
files等于一个字典,该字典有一个键值对,键为"files",值为通过以二进制读取模式打开"git.jpeg"文件而得到的内容。
发送一个POST请求到"http://httpbin.org/post" ,请求中包含files参数 ,将请求结果赋值给response变量 。
print(response.text)
2、获取cookie
import requests
发出请求,获取网页,请求的网址为http://www.baidu.com,将获取的内容赋值给response 。
print(response.cookies)
针对响应中的每个cookie,获取其键值对,对于其中的键,将其赋值给变量key,对于其中的值,将其赋值给变量value 。
print(key+"="+value)
3、会话维持
cookie的一个作用就是可以用于模拟登陆,做会话维持。
import requests
s = requests.Session()
s发起一个请求,请求的目标地址是http://httpbin.org/cookies/set/number/123456 。
发送请求,请求的目标地址是http://httpbin.org/cookies ,并将响应结果赋值给response 。
print(response.text)
4、证书验证