python requests(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

在互联网技术蓬勃发展的今天,Python Requests 已经成为开发者与网络世界交互的核心工具之一。无论是爬取网页数据、调用 API 接口,还是自动化完成日常任务,Requests 库都凭借其简洁的语法和强大的功能,成为 Python 生态中不可或缺的“瑞士军刀”。对于编程初学者而言,掌握这一库能够快速解锁网络编程的大门;而对于中级开发者,深入理解其底层逻辑和高级功能,则能显著提升代码的健壮性和效率。本文将从基础到进阶,结合实际案例,带你一步步探索 Python Requests 的核心用法和最佳实践。


一、什么是 Python Requests?

Python Requests 是一个基于 Python 语言的第三方 HTTP 客户端库。它简化了 HTTP 请求的发送和响应处理过程,让开发者无需手动处理复杂的协议细节(如 headers、SSL 证书、Cookie 等),只需通过简单的函数调用即可完成网络交互。

可以将 Requests 比喻为“网络世界的快递员”:当你需要从某网站获取数据时,它会替你打包请求(如 GET 或 POST 方法)、填写收件地址(URL)、处理包装细节(请求头、参数),并将最终结果(响应内容)安全送达。它的设计目标是让网络编程变得像日常对话一样简单。


二、安装与配置

在开始之前,首先需要安装 Requests 库。通过 Python 的包管理工具 pip 即可完成:

pip install requests

安装完成后,可以通过以下代码验证是否成功:

import requests
print(requests.__version__)  # 输出当前版本号,例如:2.31.0

三、基础用法:发送第一个 GET 请求

1. GET 请求的简单示例

假设我们想从 GitHub 的公共 API 获取某个仓库的信息,可以通过 GET 方法实现:

import requests

response = requests.get("https://api.github.com/repos/requests/requests")

print("Status Code:", response.status_code)

print("Response Content:", response.json())

关键点解释

  • requests.get() 是发送 GET 请求的核心函数。
  • response 对象封装了服务器返回的所有信息,包括状态码、内容、headers 等。
  • response.status_code 返回 HTTP 状态码(如 200 表示成功,404 表示未找到)。
  • response.json() 将响应内容自动解析为 Python 字典(前提是响应是 JSON 格式)。

2. 处理查询参数

在 URL 中添加查询参数(如搜索关键词、分页参数)时,可以通过 params 参数传递字典:

params = {
    "q": "python",
    "page": 2,
    "per_page": 10
}
response = requests.get("https://api.github.com/search/repositories", params=params)
print(response.json()["items"])  # 打印搜索结果

比喻:这就像在超市的货架上寻找商品,params 就是你对货架的筛选条件(如“分类:Python,页码:2”)。


3. 添加请求头

某些网站会通过检查请求头来识别请求来源。例如,设置 User-Agent 可以伪装成浏览器访问:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
response = requests.get("https://httpbin.org/get", headers=headers)
print(response.json()["headers"]["User-Agent"])  # 输出设置的 User-Agent

四、POST 请求与表单提交

POST 请求通常用于向服务器提交数据(如登录、表单提交)。通过 requests.post() 函数,可以传递 data 参数(表单数据)或 json 参数(JSON 数据):

payload = {
    "username": "your_username",
    "password": "your_password"
}
response = requests.post("https://example.com/login", data=payload)
print("登录成功" if response.status_code == 200 else "登录失败")

注意:实际开发中,敏感信息(如密码)应通过安全的方式处理,避免硬编码在代码中。


五、高级功能与优化技巧

1. 会话对象(Session)

频繁访问同一网站时,使用 Session 对象可以复用 TCP 连接、Cookie 和 headers,提升效率。

session = requests.Session()

login_response = session.post("https://example.com/login", data=payload)

protected_page = session.get("https://example.com/dashboard")
print(protected_page.text)

比喻:会话对象就像你与快递公司的长期合作,无需每次都重新填写地址和联系方式。


2. 处理超时与异常

网络请求可能因超时或服务器错误失败,需通过 timeout 参数和 try-except 块进行容错:

try:
    response = requests.get("https://api.example.com/data", timeout=5)  # 设置超时时间为5秒
    response.raise_for_status()  # 若状态码非2xx,抛出异常
except requests.exceptions.Timeout:
    print("请求超时,请重试!")
except requests.exceptions.HTTPError as err:
    print(f"HTTP 错误: {err}")
except Exception as e:
    print(f"其他错误: {e}")

3. 下载大文件的流式处理

当需要下载大型文件(如视频、数据库备份)时,使用流式传输(stream=True)可避免一次性加载全部内容到内存:

url = "https://example.com/large-file.zip"
response = requests.get(url, stream=True)

with open("large-file.zip", "wb") as f:
    for chunk in response.iter_content(chunk_size=8192):
        f.write(chunk)

六、实际案例:获取天气数据

通过调用公开的天气 API,演示从发送请求到处理结果的完整流程:

import requests

def get_weather(city):
    api_key = "YOUR_API_KEY"  # 从天气 API 提供商获取
    base_url = "http://api.weatherapi.com/v1/current.json"
    
    params = {
        "key": api_key,
        "q": city
    }
    
    try:
        response = requests.get(base_url, params=params)
        response.raise_for_status()
        
        data = response.json()
        print(f"当前 {data['location']['name']} 的天气是:")
        print(f"温度:{data['current']['temp_c']}°C")
        print(f"天气状况:{data['current']['condition']['text']}")
        
    except requests.exceptions.RequestException as e:
        print(f"请求失败:{e}")

get_weather("Beijing")

七、最佳实践与注意事项

1. 遵守网站的 Robots 协议

在爬取网页或调用 API 时,务必先查看目标网站的 robots.txt 文件,确认是否允许爬虫访问。例如:

response = requests.get("https://github.com/robots.txt")
print(response.text)

2. 限制请求频率

频繁请求可能触发反爬虫机制,可通过 time.sleep() 控制间隔:

import time

for page in range(1, 6):
    response = requests.get(f"https://example.com/page/{page}")
    time.sleep(2)  # 每次请求间隔2秒

3. 安全与隐私

  • 避免在代码中硬编码敏感信息(如 API 密钥),可使用环境变量或配置文件。
  • 对 SSL 证书进行验证时,若需忽略警告(非生产环境),可设置 verify=False,但需谨慎使用。

八、结论

Python Requests 作为网络编程的“瑞士军刀”,凭借其简洁的接口和强大的功能,为开发者提供了高效且友好的网络交互体验。从基础的 GET/POST 请求,到会话管理、异常处理等高级技巧,本文通过案例与代码示例,逐步展示了如何利用这一工具解决实际问题。

对于初学者,建议从简单的 API 调用开始,逐步尝试更复杂的场景;中级开发者则可以深入探索流式下载、代理设置等进阶功能。记住,实践是掌握技术的最佳途径——尝试用 Requests 实现一个天气预报程序、构建自己的爬虫工具,或与你熟悉的第三方 API 进行交互吧!

通过持续练习和探索,你将发现 Python Requests 的更多可能性,并在互联网编程的世界中游刃有余。

最新发布