1.发出请求。
HTTP 请求类型:GET,POSTPUT,DELETE,HEAD 以及 OPTIONS
payload = {'key':'value'} r1 = requests.get('http://httpbin.org/get',params=payload) #使用 params 关键字参数,以一个字符串字典来提供这些参数,传URL参数
print(r1.url)
输出:http://httpbin.org/get?key=value
r2 = requests.post('http://httpbin.org/post',data={'key1':'value1'}) print(r2.text) #r3 = requests.put('http://httpbin.org/put',data={'key2':'value2'}) #print(r3.text) 输出: "form": { "key1": "value1" }
r = requests.delete('http://httpbin.org/delete') r = requests.head('http://httpbin.org/get') r = requests.options('http://httpbin.org/get')
2.encoding、text、status_code属性
r = requests.get('https://tieba.baidu.com/index.html') print(r.encoding) #r.encoding属性可以看到返回网页编码 r.encoding = 'UTF-8' #如果返回的网页有乱码,能够使用 r.encoding 属性来改变编码 #print(r.text) #改变编码后,每次访问 r.text ,Request 都将会使用 r.encoding 的新值 print(r.status_code) #r.status_code查看返回报文的状态码
输出:
UTF-8
200
字典里值为 None
的键都不会被添加到 URL 的查询字符串里。
print(r.content) #以字节的方式访问请求响应体
b<!DOCTYPE html><!--STATUS OK--><html><head><meta name="keywords" content="xe8xb4xb4xe5x90xa7,xe7x99xbexe5xbaxa6xe8xb4xb4xe5x90xa7,xe8xaexbaxe5x9dx9b,xe5x85xb4xe8xb6xa3,xe7xa4xbexe5x8cxba,BBS"/>......
3.定制请求头
访问某些网页的时候,如果没有浏览器的头部信息,则访问会被拒绝,加上headers,可以成功访问网页。
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
r = requests.get('https://www.zhihu.com/',headers=headers) #headers参数为一个dict
print(r.text)
返回:
4.获取二进制数据:
爬取图片或视频的时候,返回的都是二进制的数据形式
r = requests.get('https://github.com/favicon.ico') print(type(r.text),type(r.content)) #print(r.text) print(r.content) #返回的内容是一个二进制数据,我们可以将数据打印出来 with open('favicon.ico','wb') as f: # f.write(r.content) #将数据写入文件中 f.close()
输出:
上传文件(还是这个图片):
url = 'http://httpbin.org/post' files = {'file':open('favicon.ico','rb')} r = requests.post(url,files=files) print(r.text) #打印字符串
返回:
5.cookies
6.会话对象
会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie。
s = requests.session() #创建会话对象 s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') r = s.get('http://httpbin.org/cookies') #同一个会话对象会保持相同的cookie print(r.text)
输出:
{ "cookies": { "sessioncookie": "123456789" } }
如果不创建会话对象,第2个请求的返回应该是空
r1 = requests.get('http://httpbin.org/cookies/set/sessioncookie/123456789') r2 = requests.get('http://httpbin.org/cookies') print(r1.text) print(r2.text) 输出: { "cookies": { "sessioncookie": "123456789" } } { "cookies": {} }
***使用了会话,方法级别的参数也不会被跨请求保持。
s = requests.session() s.auth = ('user','pass') s.headers.update({'x-test':'true'}) r= s.get('http://httpbin.org/headers',headers={'x-test2':'true'}) r1 = s.get('http://httpbin.org/headers') #r1不会保留r的headers={'x-test2':'true'}
print(r.text)
print(r1.text)
输出:
{ "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Authorization": "Basic dXNlcjpwYXNz", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0", "X-Test": "true", "X-Test2": "true" } } { "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Authorization": "Basic dXNlcjpwYXNz", "Host": "httpbin.org", "User-Agent": "python-requests/2.22.0", "X-Test": "true" } }
会话还可以用作前后文管理器:
with requests.Session() as s: r = s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') print(r.text)
这样能确保 with
区块退出后会话能被关闭,即使发生了异常也一样。
r.headers: 访问服务器返回给我们的响应头部信息
r.request.headers:得到发送到服务器的请求的头部