requests库基本用法

 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="\xe8\xb4\xb4\xe5\x90\xa7,\xe7\x99\xbe\xe5\xba\xa6\xe8\xb4\xb4\xe5\x90\xa7,\xe8\xae\xba\xe5\x9d\x9b,\xe5\x85\xb4\xe8\xb6\xa3,\xe7\xa4\xbe\xe5\x8c\xba,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:得到发送到服务器的请求的头部
 
posted @ 2019-11-14 18:38  酸菜泡饭  阅读(243)  评论(0编辑  收藏  举报