requests是一个采用 Apache2 Licensed 开源协议的 HTTP 客户端库,是基于urllib用python编写的。使用过程中它比urllib更加方便。requests库完全满足我们当今网络的请求,
requests的安装
pip install requests
请求方式
GET
向特定的资源发送请求,比如查询数据
requests.get('www.xxx.com')
POST
向资源提交数据(比如增加数据、表单提交、文件上传)。数据被包含在请求体中,post请求可能会导致新的资源被创建或者旧资源被修改
requests.post('www.xxx.com')
PUT
向服务器提交修改内容(post请求包含put请求的功能)
requests.put('www.xxx.com')
DELETE
向服务器发送删除资源的请求
requests.delete('www.xxx.com')
OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
HTTP定义了与服务器交互的不同方法,最基本的方法就是"GET"和"POST"。事实上GET请求适用于大部分请求,根据HTTP规范GET只能用于获取信息,并且是安全和幂等的。所谓安全就是用户只能获取信息,不能对信息进行修改。但是POST请求就没有这么简单了,因为他会修改服务器上的资源。
另外GET请求提交的数据大小最多1024字节,但POST请求是没有限制的
发送带参数的请求
如论是get请求或者post请求都是可以携带参数。参数通常写成字典的形式
data = {
'key1': 'value1',
'key2': 'value2',
'arr': ['one', 'two']
}
resp = = requests.get('https://www.xxx.com', params=data)
# https://www.xxx.com/?key1=value1&key2=value2&arr=one&arr=two
print(resp.url)
GET请求 params接收参数 而POST请求是data接收参数 如下代码:
data = {
'key1': 'value1',
'key2': 'value2',
'arr': ['one', 'two']
}
resp = = requests.post('https://www.xxx.com', data=data)
POST请求发送请求头和数据实例
在爬虫操作中,经常需要携带请求头信息(比如referer、host、origin、user-agent、cookie)才能正常访问
referer:表情当前请求是从哪个url过来的,在有些反爬虫请求总中,如果不是从指定页面访问该请求 就不会有相关响应
host: 标识请求将要达到那台主机,并会在服务端被验证,如果不符合,就不能正确处理客户端的请求
origin:说明最初请求是从哪里发起的。跟referer相似,但是origin只能用于post请求。origin适用于所有请求
user-agent: 浏览器名称,服务器可以知道该请求是从哪个浏览器过来的,在爬虫中经常需要设置这个参数来伪装我们的请求是从浏览器中过来的
cookie: :http协议是无状态的, 服务器无法区分多个请求是否来自同一个人,因此需要用cookie来进行标识,一般如果需要登录才能访问的网站就需要发送cookie信息
data = {
'key1': 'value1',
'key2': 'value2',
'arr': ['one', 'two']
}
header = {
'Referer': 'https://www.xxx.com/s',
'host': 'xx.xxx.xxx',
'Origin': 'https://xxxx.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
'Cookie': 'xxxxxxxxx//......'
}
resp = = requests.post('https://www.xxx.com', data=data, header=header)
requests的响应
响应
resp.encoding #获取当前编码
resp.encoding ='UTF-8' # 设置编码
resp.text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码
resp.content #以字 #以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和deflate 压缩。
resp.headers #以字 #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
resp.status_cod_code #响应状态码
resp.raw #返 #返回原始响应体,也就是 urllib 的 response 对象,使用 使用 r.raw.read()
resp.jsno() #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
resp.raise_for_for_status() #失败请求(非200响应)抛出异常
设置Cookie
import requests
url = 'www.xxx.com'
cookie = {'cookie-key': 'cookie-value'}
resp = = requests.get(url, cookie=cookie)
请求代理
在爬虫操作中,如果同样的ip频繁就访问请求容易被拉黑。这时候我们就需要使用代理服务了
import requests
proxies = {
"http": "http://10.10.1.10:1000",
"https": "http://10.10.1.10:10001"
}
requests.get("http://xxxx.com", proxies=proxies)
欢迎关注公众号:程序员共成长
网友评论