一、requests库的常用方法
1) 这是一种使用方式,即没有headers,只有参数。
import requests
r = requests.get('https://api.github.com/events', params = {'key': 'value'})
# 注意使用的是params
r = requests.post('http://httpbin.org/post', data = {'key':'value'})
# 注意使用的是data
2)第二种使用方式,加入headers(可加入访问的浏览器,身份认证等)
import requests
url = 'https://www.baidu.com/s?'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36',
'Authorization': 'Bearer {}'.format(data_token) # token认证
或者'Authorization': 'Appcode {}'.format(appcode) #appcode认证(简单认证)
}
# 在get方法中添加params参数
response = requests.get(url, headers=headers, params={"wd": "赵丽颖"})
二、params与data的区别
params:
与get进行联用。是字典或者字节序列,作为参数增加到URL中。不仅访问URL,还可以向服务器携带参数。简单来讲也就是说对于原来的网址进行内容的提交形成新的url。
data:
与requests.post()进行联用
在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json。
常见的form表单可以直接使用data参数进行报文提交,而data的对象则是python中的字典类型;
而有时会遇到一种payload报文,这是一种json格式的报文,因此传入的报文对象也应该是格式的;
data={
'xx':'xx'
}
import request
import json
# 1
requests.post(url, data=json.dumps(data))
# 2-json参数会自动将字典类型的对象转换为json格式
requests.post(url, json=data)
#很明显如果是data其格式必须为字符串这时候要进行json模块的转化,而json进行传的时候就不需要进行转换
三、get与post区别
GET方法
在GET方法中,数据将作为URL的参数发送,这些参数通常是由&符号分隔的名称和值对的字符串。通常,具有GET数据的URL将如下所示:
1 |
|
在URL中name和age都是GET参数,john和24是这些参数的值;多个“参数=值”可通过与&符号级联被嵌入URL里。人们只能通过GET方法发送简单的文本数据。
使用GET方法的优点和缺点
1、由于GET方法发送的数据显示在URL中,因此可以使用特定查询字符串值为页面添加书签。
2、GET方法不适合传递用户名和密码等敏感信息,因为这些信息在URL查询字符串中完全可见,并且可能作为访问页存储在客户端浏览器的内存中。
3、由于GET方法将数据分配给服务器环境变量,因此URL的长度是有限的。因此,要发送的总数据存在限制。
POST方法:
在POST方法中,数据作为包在与处理脚本的单独通信中发送到服务器;通过POST方法发送的数据在URL中不可见。
POST方法适用于可以传递大量信息的情况。当服务器通过采用POST的表单接收请求时,它在对URL进行请求之后立即传输表单输入的所有相关信息。
使用POST方法的优点和缺点
1、它比GET更安全,因为用户输入的信息在URL查询字符串或服务器日志中永远不可见。
2、可以传递的数据量有一个更大的限制,一个人可以使用POST发送文本数据和二进制数据(上传文件)。
3、由于POST方法发送的数据在URL中不可见,因此无法使用特定查询为页面添加书签。
举例具体来说:
import requests
url='http://www.baidu.com'
#下面使用requests.request(method, url, **kwargs)
re=requests.request('GET',url)
经验证,可用。
我们试着传入一个字典,首先用params参数。
结果为:
亮点在url和args。
我们还用get方法,把dic这个字典传给data试试看。
亮点还是在args和url。惊喜地发现,dic这个字典没传进去。
这是因为:
params是用来发送查询字符串,而data是用来发送正文的。post方法和get方法的特性是:这两种参数post方法都可以用,get方法只能发查询字符串,不能发送正文。
接下来试试看post方法:
上面这是用data参数传字典的,亮点在form。
再试试用params参数传这个字典:
亮点在url和args。
所以,args,url与params参数有直接联系。而form与data有直接联系。
四、参考博客
python爬虫之 requests库的使用 - 灰信网(软件开发博客聚合) (freesion.com)
深入requests库params|data|json参数 | data (lmlphp.com)
(4条消息) requests模块params与data的区别_暴走的蜗牛g的博客-CSDN博客_params requests