当前位置:   article > 正文

Python之Requests模块_python requests模块

python requests模块


一、什么是Requests?

虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

二、使用步骤

1.安装

代码如下(示例):

pip install requests
  • 1

2.基本调用

代码如下(示例):

response = requests.get("http://www.baidu.com/")
# 也可以这么写
response = requests.request("get", "http://www.baidu.com/")
  • 1
  • 2
  • 3

添加参数以及请求头参数
一个HTTP接口组成部分包括:请求【请求方法、URL、请求头、请求体】、响应【响应数据】。Requests可以在内部封装的函数中设置HTTP接口所需要的请求数据。

import requests

# 发送百度搜索接口的请求
response = requests.get(url="http://www.baidu.com/S", params={"wd":"我爱炸鸡腿"})
# 或者写成
# response = requests.get(url="http://www.baidu.com/S?wd=我爱炸鸡腿")

# 打印请求的URL
print("打印的URL为:", response.url)

# 打印响应状态码
print("响应状态码为:", response.status_code)

# 打印cookie
print("百度接口返回的cookie为:", response.cookies)

# 打印响应头
print("百度接口返回的响应头为:", response.headers)

# 打印文本格式响应数据
print("百度接口返回的文本格式响应数据为:", response.text)

#打印字节码响应数据
print("字节码数据为:", response.content)

# 字节码数据编码,如果我们打印 text 文本 发现报错,此时需要用 decode 方法进行解码
print("给字节码数据进行编码操作:", response.content.decode("utf-8"))

# 打印编码:假设互联网传输数据的格式是 iso-8859-1,用 utf-8 解析 iso-8859-1 的数据,是无法解析的
print("编码为:", response.encoding)

# 打印json数据,
# 打印规则:首先必须是 Json 数据结构才能够打印,如果不是 json 数据结构,会抛出 JsonDecodeError 错误
print(response.json())
# 访问百度接口返回的数据是 html 结构数据,并不是 json 结构

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 使用response.text 时,Requests 会基于 HTTP 响应的文本编码自动解码响应内容,大多数 Unicode 字符集都能被无缝地解码。若需要将json字符串转字典
import json

# JSON格式字符串
json_data = '{"name": "Tom", "age": 18}'

# 使用json.loads()方法将json字符串转化为Python字典
data_dict = json.loads(json_data)

# 输出转换后的字典
print(data_dict)
# 输出:{'name': 'Tom', 'age': 18}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
'
运行
  • 如果我们需要处理一个文件中的JSON格式数据,可以使用json.load()方法将文件读取并转化成为Python字典。该方法接收一个文件句柄并返回一个Python字典对象。使用json.load()方法从文件中读取json内容并转化为字典

下面是一个从文件中读取JSON数据并转化为Python字典的示例:

import json

# 从文件中读取JSON数据
with open('data.json', 'r') as f:
    json_data = json.load(f)

# 输出转换后的字典
print(json_data)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 使用response.content 时,返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。

3.基本POST请求(data参数)

response = requests.post("http://www.baidu.com/", data = data)
  • 1

4.代理(proxies参数)

如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求:

import requests
 
# 根据协议类型,选择不同的代理
proxies = {
  "http": "http://xx.xx.xx.xx:10086",
  "https": "http://xx.xx.xx.xx:10086",
}
 
response = requests.get("http://www.baidu.com", proxies = proxies)
print response.text
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

私密代理

 
import requests
 
# 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:
proxy = { "http": "xx_xx:sry9r@61.xx.163.xx:10086" }
 
response = requests.get("http://www.baidu.com", proxies = proxy)
 
print response.text
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

HTTPS代理

import requests

url = 'https://www.example.com'
proxies = {'https': 'https://10.10.1.10:3128'}
response = requests.get(url, proxies=proxies)
print(response.text)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在上面的示例中,我们使用requests库发送了一个GET请求到https://www.example.com,并使用了一个HTTPS代理服务器,代理服务器的IP地址为10.10.1.10,端口号为3128,并打印了响应的文本内容。

使用Socks代理

import requests

url = 'https://www.example.com'
proxies = {'http': 'socks5://10.10.1.10:1080', 'https': 'socks5://10.10.1.10:1080'}
response = requests.get(url, proxies=proxies)
print(response.text)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5. Cookies 和 Session

如果一个响应中包含了cookie,那么我们可以利用 cookies参数拿到:

 
import requests
 
response = requests.get("http://www.baidu.com/")
 
# 7. 返回CookieJar对象:
cookiejar = response.cookies
 
# 8. 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
 
print cookiejar
 
print cookiedict
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在 requests 里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。

会话能让我们在跨请求时候保持某些参数,比如在同一个 Session 实例发出的所有请求之间保持 cookie 。

import requests
 
# 1. 创建session对象,可以保存Cookie值
ssion = requests.session()
 
# 2. 处理 headers
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 
# 3. 需要登录的用户名和密码
data = {"email":"mr_mao_hacker@163.com", "password":"alarmchime"}  
 
# 4. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
ssion.post("http://www.renren.com/PLogin.do", data = data)
 
# 5. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = ssion.get("http://www.renren.com/410043129/profile")
 
# 6. 打印响应内容
print response.text
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

6.处理HTTPS请求 SSL证书验证

Requests也可以为HTTPS请求验证SSL证书:

要想检查某个主机的SSL证书,你可以使用 verify 参数(也可以不写)

import requests
response = requests.get("https://www.baidu.com/", verify=True)
 
# 也可以省略不写
# response = requests.get("https://www.baidu.com/")
print r.text
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 如果SSL证书验证不通过,或者不信任服务器的安全证书,则会报出SSLError,若需要绕过校验把 verify 设置为 False 就可以正常请求了。
r = requests.get("https://www.12306.cn/mormhweb/", verify = False)
  • 1

7.响应的处理

方法一:使用json库解析JSON响应

如果HTTP响应是JSON格式的,我们可以使用json库解析响应,并获取某个字段的值。以下是示例代码的步骤:

import requests
import json

# 发送HTTP请求并解析响应
response = requests.get('http://example.com/api')
data = json.loads(response.text)
field_value = data['field']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

方法二:使用正则表达式提取字段值

如果HTTP响应不是JSON格式的,我们可以使用正则表达式提取某个字段的值。以下是示例代码的步骤:

import requests
import json

# 发送HTTP请求并提取字段值
response = requests.get('http://example.com')
pattern = re.compile(r'<title>(.*?)</title>')
field_value = re.search(pattern, response.text).group(1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在上面的示例中,我们使用requests库发送HTTP GET请求,并使用正则表达式提取某个字段的值。我们使用re.compile方法编译正则表达式,并使用re.search方法搜索响应文本。我们使用group方法获取匹配的字段值。

方法三:使用BeautifulSoup库解析HTML响应

如果HTTP响应是HTML格式的,我们可以使用BeautifulSoup库解析响应,并获取某个字段的值。以下是示例代码的步骤:

import requests
import json

# 发送HTTP请求并解析响应
response = requests.get('http://example.com')
soup = BeautifulSoup(response.text, 'html.parser')
field_value = soup.find('title').text
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在上面的示例中,我们使用requests库发送HTTP GET请求,并使用BeautifulSoup库解析响应。我们使用find方法查找HTML标签,并使用text属性获取标签文本。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/894092
推荐阅读
相关标签
  

闽ICP备14008679号