Python网络请求之Requests详解一

  发布日期:   2017-09-18
  最新修改:   2020-05-30
  阅读次数:   107 次

一、前言:

  • 前面我们讲解了urillib3库的使用知识。
  • 本次我们将通过最新最标准的官方文档来学习另一个python 中非常流行的网络请求模块Requests
  • Requests 是用Python语言编写,优雅而简单的HTTP库,其采用的开源协议为Apache2 License,所以大家可以放心的使用哦。
  • 浏览过urillib3的小伙伴们不知道有没有注意到,Requests内部也是采用来urillib3哦。所以大家可以想到,Requests使用起来肯定会比urillib3更简单便捷哦。

二、Requests的安装

  • 我们直接食用pip安装即可

    pip3 install requests

三、搬砖历程

  • 使用requests发起一个网络请求是非常简单的。

    1、第一步,当然是要导入我们的requests模块

    import requests

2、get请求

  • 我们以创建一个请求以get的方式获取github的发布时间数据
  • 请求后其会返回一个Respose对象,respose对象中存储了请求的结果数据。

import requests r = requests.get('https://api.github.com/events') print(r.status_code) 200 print(r.text) u'[{"repository":{"open_issues":0,"url":"https://github.com/...

4、解码

  • requests本身支持无缝解码,其会根据请求的数据页面的编码进行自动解码。
  • 我们可以打印一下之前的请求

import requests r = r = requests.get('https://api.github.com/events') print(r.encoding) print(r.text) utf-8 [{"id":"6594940555","type":"IssuesEvent","actor":{"id"...

  • 如果我们可以直接通过设置encoding重新设置其编码。
  • 如果更改编码,请求将在调用r.text时使用r.encoding的新值重新进行编码。
  • 当然我们也可以通过r.content来查找编码,然后设置r.encoding这也是常用的方式

5、直接获取响应的原始数据

  • 我们可以直接通过request.content获取byte类型的响应数据而不需要通过request.txt属性去获取
  • 而且我们还可以通过iter_content返回byte类型数据的迭代器,直接存进文件中,一般可以采用如下的模版代码。

import requests r = r = requests.get('https://api.github.com/events') print(r.content) b'[{"id":"6601500059","type":"PushEvent","actor":{"id":1468181,"login":"hk。。。。 with open('save_data.txt', 'wb') as fd: for chunk in r.iter_content(chunk_size=128): fd.write(chunk)

6、直接以json格式获取响应的数据

  • 一般开发中我们用到的数据都要经过自己加工后将其转换为json格式的数据。
  • 但是用了requests之后我们就可以省去这部分工作了。
  • 我们获得response对象后直接调用json()方法即可

import requests r = r = requests.get('https://api.github.com/events') print(r.json()) [{'id': '6601503359', 'type': 'CreateEvent', 'actor': {'id': 25371315, 'login': 'Chandra0505', 'display_login': '......

7、requests获取原始的套件字响应。

  • 我们一般不需要获取原始的套接字响应数据,但是如果你有需要的话requests也已经给我们提供有相关的api了。
  • 我们只需要在请求时设置一个stream参数为True,然后通过r.raw即可获取原始的套接字数据,之后根据需要调用read从里面拿数据即可。

import requests r = r = requests.get('https://api.github.com/events',stream=True); print(r.raw) print(r.raw.read(10))


   转载规则

《Python网络请求之Requests详解一字》GajAngels 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。