requests笔记
发送get请求:
发送get请求,直接调用requests.get
就可以了。想要发送什么类型的请求,就调用什么方法。
response = requests.get(url = "https://www.baidu.com/")
response的一些属性:
import requests
#请求头headers = {"User-Agent": "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()
response = requests.get("http://www.baidu.com/s", params = kw, headers = headers)
# 查看响应内容,response.text 返回的是Unicode格式的数据(str)
print(response.text)
# 查看响应内容,response.content返回的字节流数据(byte)
print(response.content)
# 查看完整url地址
print(response.url)
# 查看响应头部字符编码
print(response.encoding)
# 查看响应码
print(response.status_code)
response.text和response.content的区别:
response.content:这个是直接从网络上面抓取的数据。没有经过任何解码。所以是一个bytes类型。其实在硬盘上和在网络上传输的字符串都是bytes类型。
response.text:这个是str的数据类型,是requests库将response.content进行解码的字符串。解码需要指定一个编码方式,requests会根据自己的猜测来判断编码的方式。所以有时候可能会猜测错误,就会导致解码产生乱码。这时候就应该使用
response.content.decode('utf-8')
进行手动解码。
发送post请求:
发送post请求非常简单。直接调用requests.post
方法就可以了。
如果返回的是json数据。那么可以调用response.json()
来将json字符串转换为字典或者列表。
使用代理:
在请求方法中,传递proxies
参数就可以了。
处理cookie:
如果想要在多次请求中共享cookie。那么应该使用session。示例代码如下:
import requests
url = "http://www.renren.com/PLogin.do"
data = {"email":"970138074@qq.com",'password':"pythonspider"}
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
}
session = requests.Session()
session.post(url,data=data,headers=headers)
response = session.get('http://www.renren.com/880151247/profile')
with open('renren.html','w',encoding='utf-8') as fp:
fp.write(response.text)