安装
pip install requests
用法
import requests,json
#get请求=================================================
#params用来加参数,headers来传headers参数
'''
payload = {'key1':'value1','key2':'value2'}
headers = {'content-type':'application/json'}
r = requests.get('http://httpbin.org/get',params=payload,headers=headers)
print(r.url)
#http://httpbin.org/get?key2=value2&key1=value1
'''
#请求json文件
'''
r = requests.get("http://100.39.8.54:8080/a.json")
print(r.text)
print(r.json())
'''
#获取来自服务器的原始套接字响应,在初始请求中设置stream=True
'''
r = requests.get('https://github.com/timeline.json',stream=True)
print(r.raw)
#<urllib3.response.HTTPResponse object at 0x00000000034ECB70>
print(r.raw.read(10))
#b'{"message"'
'''
#post请求================================================
#利用data来传参数,表单形式
'''
payload = {'key1':'value1','key2':'value2'}
r = requests.post("http://httpbin.org/post",data=payload)
print(r.text)
'''
'''
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection":"close",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.4"
},
"json": null,
"origin":"124.65.241.202",
"url": "http://httpbin.org/post"
}
'''
#利用json.dumps()把表单数据序列化,传json格式
'''
url = 'http://httpbin.org/post'
payload = {'some':'data'}
r = requests.post(url,data=json.dumps(payload))
print(r.text)
'''
'''
{
"args": {},
"data": "{\"some\": \"data\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection":"close",
"Content-Length": "16",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.4"
},
"json": {
"some": "data"
},
"url": "http://httpbin.org/post"
}
'''
#用file参数上传文件
'''
url = 'http://httpbin.org/post'
files = {'file':open('a.txt','rb')}#a.txt里面内容为hello world!
r = requests.post(url,files=files)
print(r.text)
'''
'''
{
"args": {},
"data": "",
"files": {
"file": "Hello World!"
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection":"close",
"Content-Length": "153",
"Content-Type": "multipart/form-data; >boundary=7d8eb5ff99a04c11bb3e862ce78d7000",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.4"
},
"json": null,
"origin":"124.65.241.202",
"url": "http://httpbin.org/post"
}
'''
#requests是支持流式上传的,允许发送大的数据流而无需先把他们读入内存。要使用流式上传,需要为请求体提供一个类文件对象。
'''
with open('massive-body') as f:
response = requests.post('http://some.url/streamed',data=f)
print(response.text)
'''
#Cookies======================================================
'''
response = requests.get("http://www.baidu.com/")
#返回CookieJar对象
cookiejar = response.cookies
#将CookieJar转为字典
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print(cookiejar)
print(cookiedict)
'''
'''
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
{'BDORZ': '27315'}
'''
#超时配置=====================================================
#timeout变量来配置最大请求时间,timeout仅对连接过程有效,与响应体的下载无关
'''
r = requests.get('http://github.com',timeout=0.001)
print(r)
'''
#会话对象=====================================================
#通过cookies实现持久会话
'''
#会话1:
s = requests.Session()
#设置cookies
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
#获得cookies
r = s.get("http://httpbin.org/cookies")
print(r.text)
'''
'''
{
"cookies": {
"sessioncookie": "123456789"
}
}
'''
#会话是一个全局变量,进行全局配置
'''
s = requests.Session()
s.headers.update({'x-test':'true'})
r = s.get('http://httpbin.org/headers',headers={'x-test2':'true'})
print(r.text)
'''
'''
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.4",
"X-Test": "true",
"X-Test2": "true"
}
}
'''
#如果不想要全局配置中的一个变量设置为None即可
'''
s = requests.Session()
s.headers.update({'x-test':'true'})
r = s.get('http://httpbin.org/headers',headers={'x-test':None})
print(r.text)
'''
'''
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.4"
}
}
'''
#SSL证书验证===============================================
#Requests可以为HTTPS请求验证SSL证书,就想web浏览器一样
#如果想跳过12306的证书验证,把verify设置为False即可
'''
r = requests.get('https://kyfw.12306.cn/otn/',verify=False)
print(r.text)
'''
'''
也可以引入Python关于证书的处理模块SSL
1.导入Python SSL处理模块
import ssl
2.标识忽略未经核实的SSL证书认领
context = ssl._create_unverified_context()
'''
#代理======================================================
#如果需要使用代理,可以通过为任意请求方法提供proxies参数来配置单个请求
#根据协议类型,选择不同的代理
'''
proxies = {
"https":"http://41.118.132.69:4433",
"http":"http://41.118.132.69:4433"
}
r = requests.post("http://httpbin.org/post",proxies=proxies)
print(r.text)
'''
#私密代理(特定格式)
#如果代理需要使用HTTP Basic Auth,可以使用下面这种格式
'''
proxy = {"http": "mr_mao_hacker:sffqry9r@61.158.163.130:16816"}
response = requests.get("http://www.baidu.com",proxies = proxy)
print(response.text)
'''
#web客户端验证,需要添加auth=(账户名,密码)
'''
auth=('test','123456')
response = requests.get('http://192.168.199.107',auth = auth)
print(response.text)
'''
#也可以通过环境变量HTTP_PROXY和HTTPS_PROXY来配置代理
'''
export HTTP_PROXY = "http://10.10.1.10:3128"
export HTTPS_PROXY ="HTTP://10.10.1.10:1080"
'''
#爬取天气
response = requests.get("http://www.sojson.com/open/api/weather/json.shtml?city=%E9%83%91%E5%B7%9E")
response.encoding="utf-8"
print(response.text)