requests库的使用

requests简介:
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,Requests它会比urllib更加方便,可以节约我们大量的工作。

一、安装requests库
非常简单,打开命令行,输入下面的安装命令:

pip install requests

二、基本使用
我们先来看一个使用小例子:

import requests
 
response  = requests.get("https://www.baidu.com")
print(type(response))
print(response.status_code)
print(type(response.text))
#获得响应头内容
print(response.headers)
print(response.headers['content-type'])
#还可以用这种方式获取请求头内容
print(response.request.headers)
 
response.enconding = "utf-8'
print(response.text)
 
print(response.cookies)
 
print(response.content)
print(response.content.decode("utf-8"))

这里的response.text返回的是Unicode格式,通常需要转换为utf-8格式,否则就是乱码。response.content是二进制模式,可以下载视频之类的,如果想看的话需要decode成utf-8格式。
提醒一下,不管是通过response.content.decode("utf-8)的方式还是通过response.encoding="utf-8"的方式都可以避免乱码的问题发生。

在requests库中,有几种常见的方法(请求方式):

import requests

requests.post("http://httpbin.org/post")  #post请求
requests.put("http://httpbin.org/put")  #put请求
requests.delete("http://httpbin.org/delete")  #delete请求
requests.head("http://httpbin.org/get")  #head请求
requests.options("http://httpbin.org/get")  #options请求

(1)我们先来学习get请求:
最基本的get请求:

import requests

url = 'https://www.baidu.com/'
response = requests.get(url)
print(response.text)

带参数的get请求:
如果想查询http://httpbin.org/get页面的具体参数,需要在url里面加上,例如我想看有没有Host=httpbin.org这条数据,url形式应该是http://httpbin.org/get?Host=httpbin.org

举个小例子(下面提交的数据是往这个地址传送data里面的数据):

import requests
 
url = 'http://httpbin.org/get'
data = {
    'name':'zhangsan',
    'age':'25'
}
response = requests.get(url,params=data)
print(response.url)
print(response.text)

我们来学习一下Json数据:
举个小例子:

import requests
import json
 
response = requests.get("http://httpbin.org/get")
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json())
print(response.json()['data'])

这里提醒大家:requests中**response.json()**方法等同于json.loads(response.text)方法。

接下来学习一下获取二进制数据:
在上面提到了response.content,这样获取的数据是二进制数据,用这个方法可以下载图片以及视频资源(图片和视频都是二进制流)。

现在我们要学习添加header
首先说,为什么要加header(头部信息)呢?例如下面,我们试图访问知乎的登录页面(当然大家都你要是不登录知乎,就看不到里面的内容),我们试试不加header信息会报什么错。

import requests
 
url = 'https://www.zhihu.com/'
response = requests.get(url)
response.encoding = "utf-8"
print(response.text)

结果:
提示发生内部服务器错误(也就说你连知乎登录页面的html都下载不下来)。

<html><body><h1>500 Server Error</h1>
An internal server error occured.
</body></html>

因此,如果想访问就必须得加headers信息!
在浏览器中打开网站页面;
右键点击“检查”
选择“Network”
刷新一下页面
随便点击一个数据包
拉到下面
即可看到user-agent(就是我们需要的头部)
在这里插入图片描述
从此以后,就要记得在get方法中加入头部信息啦。

import requests
 
url = 'https://www.zhihu.com/'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
}
response = requests.get(url,headers=headers)
print(response.text)

这样肯定就能请求到页面了。

(2)post请求:
使用post请求把数据提交到url地址等同于一字典的形式提交form表单里面的数据。看个小例子:

import requests
 
url = 'http://httpbin.org/post'
data = {
    'name':'jack',
    'age':'23'
    }
response = requests.post(url,data=data)
print(response.text)

看看响应的结果:

{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "age": "23",
    "name": "jack"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
    "Content-Length": "16",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.13.0"
  },
  "json": null,
  "origin": "118.144.137.95",
  "url": "http://httpbin.org/post"
}

(3)request的高级操作:
文件上传
看个简单的小例子:

import requests

url = "http://httpbin.org/post"
files= {"files":open("test.jpg","rb")}
response = requests.post(url,files=files)
print(response.text)

结果:
在这里插入图片描述
获取cookie
举个小例子:

import requests

response = requests.get('https://www.baidu.com')
print(response.cookies)
for key,value in response.cookies.items():
    print(key,'==',value)

会话维持
cookie的一个作用就是可以用于模拟登陆,做会话维持。

import requests

session = requests.session()
session.get('http://httpbin.org/cookies/set/number/12456')
response = session.get('http://httpbin.org/cookies')
print(response.text)

好了,这里主要讲解了requests模块当中最常用的两种请求方式——get和post请求。还想要深入学习requests模块功能的小伙伴可以私聊我哦,谢谢。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐