Requests库
Posted 花儿爷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Requests库相关的知识,希望对你有一定的参考价值。
Requests库
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库
如果你看过上篇文章关于urllib库的使用,你会发现,其实urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作。(用了requests之后,你基本都不愿意用urllib了)一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库。
1.文本编码
很多情况下的网站如果直接response.text会出现乱码的问题,通过decode()转换为utf-8,这样就解决了通过response.text直接返回显示乱码的问题.
import requests
response=requests.get("https://www.baidu.com")
response.encoding="utf-8"
print(type(response))
print(response.status_code)
print(response.cookies)
print(response.text)
2.各种请求方式
#各种请求方式
import requests
requests.post("http://httpbin.org/post")
requests.put("http://httpbin.org/put")
requests.delete("http://httpbin.org/delete")
requests.head("http://httpbin.org/get")
requests.options("http://httpbin.org/get")
3.get请求
#get请求,带参
import requests url="http://httpbin.org/get" data = { "name":"xx", "age":22 } response=requests.get(url,params=data) print(response)
4.解析json
把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式
字符串解码为python数据对象。在python的标准库中,专门提供了json库。
#json的主要方法
import json
print(json.__all__)
输出:[‘dump‘, ‘dumps‘, ‘load‘, ‘loads‘, ‘JSONDecoder‘, ‘JSONDecodeError‘, ‘JSONEncoder‘]
Json.dumps:将python对象编码成json字符串
Json.loads:将字符串解码为python对象。
import json dict1={‘name‘:‘花花‘,‘age‘:24,‘address‘:‘上海‘} print (u‘未序列化前的数据类型为:‘,type(dict1)) print (u‘未序列化前的数据:‘,dict1) #对dict1进行序列化的处理 str1=json.dumps(dict1) print (u‘序列化后的数据类型为:‘,type(str1)) print (u‘序列化后的数据为:‘,str1) #对str1进行反序列化 dict2=json.loads(str1) print (u‘反序列化后的数据类型:‘,type(dict2)) print (u‘反序列化后的数据:‘,dict2)
输出:未序列化前的数据类型为: <class ‘dict‘>
未序列化前的数据: {‘name‘: ‘花花‘, ‘age‘: 24, ‘address‘: ‘上海‘}
序列化后的数据类型为: <class ‘str‘>
序列化后的数据为: {"name": "\u82b1\u82b1", "age": 24, "address": "\u4e0a\u6d77"}
反序列化后的数据类型: <class ‘dict‘>
反序列化后的数据: {‘name‘: ‘花花‘, ‘age‘: 24, ‘address‘: ‘上海‘}
#使用request库
import json,requests response=requests.get("http://httpbin.org/get") print(type(response.text)) print(response.json()) print(json.loads(response.text)) print(type(response.json()))
- 添加headders
在谷歌浏览器里输入chrome://version,复制出来用户代理信息的信息头。例子:
import requests
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}
response =requests.get("https://www.zhihu.com",headers=headers)
print(response.text)
2.基于Post请求
通过在发送post请求时添加一个data参数,这个data参数可以通过字典构造成。
import requests,json url="http://httpbin.org/post" data={ "name":"花花", "age":24 } response=requests.post(url,data=data) print(json.loads(response.text)) #其他属性 print(response.status_code) print(response.cookies) print(response.headers) print(response.history)
3.文件上传
实现方法和其他参数类似,也是构造一个字典然后通过files参数传递。
import requests files= {"files":open("git.jpeg","rb")} response = requests.post("http://httpbin.org/post",files=files) print(response.text)
4.获取cookie
import requests response=requests.get("http://www.baidu.com") print(response.cookies) for key,value in response.cookies.items(): print(key+"="+value)
5.会话维持
cookie的一个作用就是可以用于模拟登陆,做会话维持
#通过创建一个session对象,两次请求都通过这个对象访问
import requests s=requests.session() s.get("http://httpbin.org/cookies/set/number/123456") response=s.get("http://httpbin.org/cookies") print(response.text)
6.证书验证
import requests from requests.packages import urllib3 urllib3.disable_warnings() response = requests.get("https://www.12306.cn",verify=False) print(response.status_code)
代理设置
异常处理
import requests
from requests.exceptions import ReadTimeout,ConnectionError,RequestException
try:
response=requests.get("http://httpbin.org/get",timout=0.1)
print(response.status_code)
except ReadTimeout:
print("timeout")
except ConnectionError:
print("connection Error")
except RequestException:
print("error")
以上是关于Requests库的主要内容,如果未能解决你的问题,请参考以下文章