response = requests.get(url)
得到的是响应类型
response.text
得到的是字符串类型
response.json()与json.loads(response.text)得到的结果是一样的,都是字典类型
响应类型可以直接调用json()跟loads调用response.text类型的效果是一样的,但是两者的参数不同
获取二进制数据
response = requests.get(图片地址)
response.text—>返回的是str类型
response.content—>返回的是bytes类型
需要对二进制数据保存时,就要返回二进制形式,.content
高级操作
文件上传:需要以post方式发送请求
import requests
files = {"file":open("favicon.ico","rb")}
response = requests.post("http://httpbin.org/post",files=files)
获取cookie:<class 'requests.cookies.RequestsCookieJar'>
import requests
response = requests.get('http://www.baidu.com')
print(response.cookies)
for item in response.cookies.items():
print(key+'='+value)
会话维持(模拟登陆):
import requests
s = requests.Session()#实例化一个Session对象
s.get('http://httpbin.org/cookies/set/number/12345678')
response = s.get('http://httpbin.org/cookies')
发起的两次请求相当于一次set cookie,一次get cookie
print(response.text)
证书验证:
在发送https请求的时候,首先会验证证书的合法性,需要跳过证书的话,可以设置verify=False
消除警告信息urllib3.disable_warnings()
以上两个配合使用
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
response = requests.get('https://www.12306.cn')
print(response.status_code)
代理设置:
如果不支持HTTP、HTTPS代理,可以设置socks代理
HTTP代理:能够代理客户机的HTTP访问,主要是代理浏览器访问网页,它的端口一般为80、8080、3128等;
SOCKS代理:SOCKS代理与其他类型的代理不同,它只是简单地传递数据包,而并不关心是何种应用协议,既可以是HTTP请求,所以SOCKS代理服务器比其他类型的代理服务器速度快得多。
SOCKS代理又分为SOCKS4和SOCKS5,二者不同的是SOCKS4代理只支持TCP协议(即传输控制协议),而SOCKS5代理既支持TCP协议又支持UDP协议(即用户数据包协议),还支持各种身份验证机制、服务端域名解析等。SOCKS4能做到的SOCKS5都可得到,但是SOCKS5能够做到的SOCKS4则不一定能做到,比如我们常用的聊天工具QQ在使用代理时就要求用SOCKS5代理,因为它需要使用UDP来传输协议。
如果不想被别人看到真实IP,用高匿的SOCKS5代理IP就可以的。
超时设置:timeout=xxx
import requests
from requests.exceptions import ReadTimeout
try:
response=requests.get('http://httpbin.org/get',timeout=0.5)
print(response.status_code)
except ReadTimeout:
print('Timeout')
不在0.5秒内响应的话,则返回提示信息’Timeout’
认证设置(需要登录才能够查看内容):
import requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://code.tarena.com.cn/AIDCode/aid1904/',
auth=HTTPBasicAuth('tarenacode', 'code_2013'))
print(r.status_code)
或者将元组形式的账号密码传递给auth也是可以的,这个时候就不需要引入HTTPBasicAuth模块
import requests
r = requests.get('http://code.tarena.com.cn/AIDCode/aid1904/',auth=('tarenacode', 'code_2013'))
print(r.status_code)
异常处理(保证程序不间断运行,清晰分析出现的错误)
try:
pass
except xxx:
pass