Python技术教程之request模块

举报
tea_year 发表于 2025/11/27 12:08:01 2025/11/27
【摘要】 1.1 简介Python 内置了 requests 模块,该模块主要用来发 送 HTTP 请求,requests 模块比 urllib 模块更简洁。requests是使用Apache2 licensed 许可证的HTTP库。Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。在python内...

1.1 简介

Python 内置了 requests 模块,该模块主要用来发 送 HTTP 请求,requests 模块比 urllib 模块更简洁。requests是使用Apache2 licensed 许可证的HTTP库。Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。当然,requests模块国际化,友好。requests会自动实现持久连接keep-alive。

上面写了一大堆,简单总结来说,如下:

  • 简洁
  • 支持HTTP连接和连接池,自动实现长连接
  • 支持cookie
  • 支持文件上传
  • 支持响应内容的编码
  • 支持国际化

🎈1.2 安装

从以前学习的,可以知道这个库很容易安装,在Mac下,打开终端,如下:

# 查看已经安装的库
Aion.Liu $ pip list
Package    Version
---------- -------
meson      0.63.0
pip        22.2.2
protobuf   4.21.4
pymongo    4.2.0
PyMySQL    1.0.2
pypi       2.1
setuptools 63.2.0
xlrd       2.0.1
xlwt       1.3.0
xmltodict  0.13.0

# 安装requests库
Aion.Liu $ pip install requests
Collecting requests
  Using cached requests-2.28.1-py3-none-any.whl (62 kB)
Collecting certifi>=2017.4.17
  Downloading certifi-2022.6.15-py3-none-any.whl (160 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 160.2/160.2 kB 360.7 kB/s eta 0:00:00
Collecting idna<4,>=2.5
  Downloading idna-3.3-py3-none-any.whl (61 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.2/61.2 kB 160.3 kB/s eta 0:00:00
Collecting charset-normalizer<3,>=2
  Downloading charset_normalizer-2.1.0-py3-none-any.whl (39 kB)
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.11-py2.py3-none-any.whl (139 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 139.9/139.9 kB 69.9 kB/s eta 0:00:00
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
Successfully installed certifi-2022.6.15 charset-normalizer-2.1.0 idna-3.3 requests-2.28.1 urllib3-1.26.11

现在,我们已经安装了requests模块,下面开始更详细的了解他。

🏮2 requests模块详操

🎈2.1 resquests属性和方法

属性和方法

备注

delete(url, args)

发送 DELETE 请求到指定 url

get(url, params, args)

发送 GET 请求到指定 url

head(url, args)

发送 HEAD 请求到指定 url

patch(url, data, args)

发送 PATCH 请求到指定 url

post(url, data, json, args)

发送 POST 请求到指定 url

put(url, data, args)

发送 PUT 请求到指定 url

request(method, url, args)

向指定的 url 发送指定的请求方法

🎈2.2 response属性和方法

属性和方法

备注

apparent_encoding

编码方式

close()

关闭与服务器的连接

response.content

返回响应的内容,字节(byte)为单位的数据

response.text

返回响应的内容,字符串unicode 类型数据

response.content.decode

解决中文乱码,默认utf-8,其他的编码类型gbk、gb2312、asci、iso-8859-1、

cookies

返回一个 CookieJar 对象,包含了从服务器发回的 cookie

elapsed

返回一个 timedelta 对象,包含了从发送请求到响应到达之间经过的时间量,可以用于测试响应速度。比如 r.elapsed.microseconds 表示响应到达需要多少微秒。

encoding

解码 r.text 的编码方式

headers

返回响应头,字典格式

history

返回包含请求历史的响应对象列表(url)

is_permanent_redirect

如果响应是永久重定向的 url,则返回 True,否则返回 False

is_redirect

如果响应被重定向,则返回 True,否则返回 False

iter_content()

迭代响应

iter_lines()

迭代响应的行

json()

返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)

links

返回响应的解析头链接

next

返回重定向链中下一个请求的 PreparedRequest 对象

ok

检查 “status_code” 的值,如果小于400,则返回 True,如果不小于 400,则返回 False

raise_for_status()

如果发生错误,方法返回一个 HTTPError 对象

reason

响应状态的描述,比如 “Not Found” 或 “OK”

request

返回请求此响应的请求对象

status_code

返回 http 的状态码,比如 404 和 200(200 是 OK,404 是 Not Found)

url

返回响应的 URL

简单实验下,如下:

# 导入库,引入依赖
>>> import requests
>>>
>>> url = "http://www.baidu.com"
>>>
>>> response = requests.get(url)
# 获取请求
>>> print(response)
# 请求返回值的类型
>>> print(type(response)) 
# 请求返回值的响应编码
>>> print(response.status_code)
200
# 请求返回值内容类型
>>> print(type(response.text))
<class 'str'>
  
# 请求返回值的cookies
>>> print(response.cookies)
  
# 请求返回值的文本内容
>>> print(response.text)

有些属性没有罗列出来,可以实验性的测试下。

🎈2.3 GET请求|发送带headers参数请求

  •  1)查看浏览器请求头部信息

              打开百度,然后使用快捷键F12打开,或者任意一个网页任意处右键打开检查。

  • 2)依次打开网络(Network)==> 名称(Name) ==> 标头(Headers) ==> User-Agent

   可以看到请求头信息:User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

  • 3)实验代码

                headers接收字典类型的参数作为请求头,请求头部字段作为key,字段对应的值作为value。具体的实验代码如下:

>>> import requests
# 目标网址
>>> url = "http://www.baidu.com/"

# 构建请求头字典,最重要的就是User-Agent
# 如果需要其他请求头,就在headers字典中加上
>>> headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}

# 发送请求获取响应
>>> response = requests.get(url,headers=headers)
>>> print(response.text)


2.4 GET请求|发送带参数的请求

  • /s 是百度搜索的 “入口路径”(官方定死);
  • wd 是百度搜索的 “关键词参数名”(官方定死);
  • kw 是你自己的 “参数字典变量名”(随便改)。
  • 删除网页多余的参数,简化搜索

第二个URLhttps://www.baidu.com/s?word=python

  • 方式一:网页带参数

>>> import requests
# 目标网址
>>> url = "https://www.baidu.com/s?wd=python"
>>> headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
# 发送请求获取响应
>>> response = requests.get(url,headers=headers)
>>> print(response.text)

  • 方式二:通过params构造参数字典
>>> import requests
# 目标网址
>>> url = "https://www.baidu.com/s?"
>>> headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
# 请求参数是一个字典
>>> kw = {'wd': 'python'}
# 发送请求的时候设置参数字典,获取响应
>>> response = requests.get(url, headers=headers, params=kw)
>>> print(response.text)

🎈2.5 发送带参数的请求|携带cookie

首先找到cookie,找到cookie的步骤如下,网络 ==> 名称 ==> 请求标头,找到Cookie,这个便是要找到的值。

2.6 超时参数timeout

背景: 请求很久没有结果,网页一直在Loading,在爬虫中,这个就降低了我们的效率。这个时候我们需要对请求进行强制要求,让请求在特定的时间内返回结果,否则报错。

import requests
#url:就是平时我们使用的网址;
url="http://www.baidu.com/s"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}#发送请求获取响应
#请求参数,设置成字典;
kw={'wd':'python'}
response=requests.get(url,headers=headers,timeout=10)
for i in range(4):
    response=requests.get(url,headers=headers,timeout=20)
    if response.status_code==200:
        break
if response and response.status_code == 200:
    html_str = response.content.decode('utf-8')
    print(html_str)
else:
    print("所有访问尝试都失败了!")
    html_str = ""  # 避免变量未定义
    print(html_str)

备注:r = requests.get('url',timeout=1) #设置秒数超时,仅对于连接有效。







【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。