前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >requests库的基本用法

requests库的基本用法

作者头像
爱吃西瓜的番茄酱
发布2018-07-25 15:31:43
3760
发布2018-07-25 15:31:43
举报

什么是Requests库

Requests 是使用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库。 它比urllib库更加方便,可以节约我们大量的工作,完全满足HTTP测试需求。 一句话—Python实现的简单易用的HTTP库。

requests的安装

代码语言:javascript
复制
pip install requests

实例引入

这里使用requests向百度发送get请求,并输出状态码和cookie信息:

代码语言:javascript
复制
import requests

response = requests.get('http://www.baidu.com')
print(response.status_code)
# print(response.text)
print(response.cookies)
代码语言:javascript
复制
200
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

各种请求方式

使用requests可以很简单的发送各种请求,相比urllib库来说,方便很多。

代码语言:javascript
复制
import requests

requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.head('http://httpbin.org/head')
requests.delete('http://httpbin.org/delete')
代码语言:javascript
复制
<Response [200]>

基本的GET请求

代码语言:javascript
复制
import requests

response = requests.get('http://httpbin.org/get')
print(response.text)  # response.text返回响应体的源码
代码语言:javascript
复制
{"args":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Host":"httpbin.org","User-Agent":"python-requests/2.18.4"},"origin":"117.139.10.7","url":"http://httpbin.org/get"}

带参数的GET请求

将一个字典传入params来构造params参数,params是一个构造URL的参数,可以使用它来动态构造URL

代码语言:javascript
复制
import requests

data = {    'name':'gemmey',    'age':22}
response = requests.get('http://httpbin.org/get', params=data)
print(response.text)
代码语言:javascript
复制
{"args":{"age":"22","name":"gemmey"},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Host":"httpbin.org","User-Agent":"python-requests/2.18.4"},"origin":"117.172.26.83","url":"http://httpbin.org/get?name=gemmey&age=22"}

解析JSON

response.text返回的大都是json格式的内容,我们可以使用response.json()方法进行解析。效果和json.loads(response.text)是一样的

代码语言:javascript
复制
import requestsimport json

response = requests.get('http://httpbin.org/get')
print(type(response.text))
print(response.json())
print(json.loads(response.text))
代码语言:javascript
复制
<class 'str'>
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'close', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.18.4'}, 'origin': '117.139.10.7', 'url': 'http://httpbin.org/get'}
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'close', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.18.4'}, 'origin': '117.139.10.7', 'url': 'http://httpbin.org/get'}

获取二进制数据

response.content用于获取响应的二进制流内容,这种处理方式常见于爬取图片或视频的二进制文件。

代码语言:javascript
复制
import requests

response = requests.get('https://github.com/favicon.ico')
print(type(response.text), type(response.content))
print(response.status_code)
代码语言:javascript
复制
<class 'str'> <class 'bytes'>
200

然后可以将二进制内容保存为图片或者视频,只需要指定相应的格式,这里注意打开文件要使用wb格式写入。

代码语言:javascript
复制
# 将图片信息保存下来import requests

response = requests.get('https://github.com/favicon.ico')
with open('favicon.ico', 'wb') as f:
    f.write(response.content)
    f.close()

添加headers

这里将字典格式的headers信息传入给参数headers

代码语言:javascript
复制
import requests

headers = {    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}
response = requests.get('https://www.zhihu.com/explore', headers=headers)
print(response.status_code)
# print(response.text)
代码语言:javascript
复制
200

基本的POST请求

将字典格式的信息传入给data参数,构造post请求,其实我们发现,requests.getrequests.post大部分参数都是要构造成字典格式的。

代码语言:javascript
复制
import requests

data = {'name':'gemmey', 'age':22}
headers = {    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}
response = requests.post('http://httpbin.org/post', data=data, headers=headers)
print(response.text)
代码语言:javascript
复制
{"args":{},"data":"","files":{},"form":{"age":"22","name":"gemmey"},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Content-Length":"18","Content-Type":"application/x-www-form-urlencoded","Host":"httpbin.org","User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64)"},"json":null,"origin":"117.139.10.7","url":"http://httpbin.org/post"}

响应(response)属性

代码语言:javascript
复制
import requests

headers = {    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}
response = requests.get('http://jianshu.com', headers=headers)
print(type(response.status_code), response.status_code)
print(type(response.headers), response.headers)
print(type(response.url), response.url)
print(type(response.history), response.history)
代码语言:javascript
复制
<class 'int'> 200
<class 'requests.structures.CaseInsensitiveDict'> {'Date': 'Wed, 30 May 2018 06:49:54 GMT', 'Server': 'Tengine', 'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'ETag': 'W/"29924b69c281f1f5708aa7338021b7da"', 'Cache-Control': 'max-age=0, private, must-revalidate', 'Set-Cookie': 'locale=zh-CN; path=/', 'X-Request-Id': '0d995087-8c71-4405-bf82-e67ba1dbcd3b', 'X-Runtime': '0.008407', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'Content-Encoding': 'gzip', 'X-Via': '1.1 PSbjwjBGP2uz240:4 (Cdn Cache Server V2.0), 1.1 PSzjtzsx2kf43:3 (Cdn Cache Server V2.0), 1.1 myd65:5 (Cdn Cache Server V2.0)', 'Connection': 'keep-alive', 'X-Dscp-Value': '0'}
<class 'str'> https://www.jianshu.com/
<class 'list'> [<Response [301]>, <Response [301]>]

状态码的判断

代码语言:javascript
复制
import requests

headers = {    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}
response = requests.get('http://jianshu.com', headers=headers)
exit() if not response.status_code == requests.codes.ok else print('Request Successfully')
代码语言:javascript
复制
Request Successfully

高级操作

文件上传

文件上传使用POST请求,将文件信息传给参数files

代码语言:javascript
复制
import requests

files = {'file': open('favicon.ico', 'rb')}
response = requests.post('http://httpbin.org/post', files=files)
print(response.status_code)
代码语言:javascript
复制
200

获取cookie

响应response有一个cookies属性,可以直接获取响应中的cookies信息。

代码语言:javascript
复制
import requests

response = requests.get('http://www.baidu.com')
print(response.cookies)for key, value in response.cookies.items():
    print(key+ ' = ' +value)
代码语言:javascript
复制
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
BDORZ = 27315

会话维持

我们通过requests.Session()方法获取服务器端的登陆状态信息。这里有两次GET请求,第一次GET是获取服务器端的登录信息,第二次GET是携带第一次获得的登录信息进行GET请求。这两次是连贯的。

代码语言:javascript
复制
import requests

s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
response = s.get('http://httpbin.org/cookies')
print(response.text)
代码语言:javascript
复制
{"cookies":{"number":"123456789"}}

证书验证

requests进行网页请求时,会自动进行网页证书的验证,如果网站证书不合法,则会抛出一个异常,比如12306官网的证书就是不合法的,如果我们像以往那样进行GET请求,则会失败。这时我们设置verify参数为False(默认为True),就是让它请求时不进行证书验证,但是这样它仍会抛出一个警告,这个我们就不用管它了。

代码语言:javascript
复制
import requests

response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)
代码语言:javascript
复制
200


D:\Anaconda\Anaconda\lib\site-packages\urllib3\connectionpool.py:858: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)

超时设置

timeout参数用来设置响应超时

代码语言:javascript
复制
import requests

response = requests.get('http://httpbin.org/get', timeout=1)
print(response.status_code)
代码语言:javascript
复制
200

异常处理

这里的ReadTimeout异常是HTTPError异常的子类,而HTTPError异常又是RequestException异常的子类,如果我们要简写捕捉异常的代码,我们可以直接写一个RequestException就可以捕捉到requests的所有可能异常。

代码语言:javascript
复制
import requests
from requests.exceptions import ReadTimeout, HTTPError, RequestException

try:
    response = requests.get('http://httpbin.org/get', timeout=0.5)
    print(response.status_code)
except ReadTimeout:
    print('TIME OUT')
except HTTPError:
    print('HTTP ERROR')
except RequestException:
    print('error')
代码语言:javascript
复制
200

每天学习一点点,每天进步一点点。

推荐阅读: 比较基础的urllib库来了解一下 Python常用库整理

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个爱吃西瓜的程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Requests库
  • requests的安装
  • 实例引入
  • 各种请求方式
  • 基本的GET请求
  • 带参数的GET请求
  • 解析JSON
  • 获取二进制数据
  • 添加headers
  • 基本的POST请求
  • 响应(response)属性
  • 状态码的判断
  • 高级操作
    • 文件上传
      • 获取cookie
        • 会话维持
          • 证书验证
            • 超时设置
              • 异常处理
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档