您的当前位置:首页正文

网络请求新手必备!用 Requests 模块轻松搞定 API 调用与网页抓取

2024-11-08 来源:个人技术集锦

网络请求新手必备:用 Requests 模块轻松搞定 API 调用与网页抓取!

如果你正在学习如何与网络交互,例如抓取网页、调用 API,或者向服务器发送数据,那么 Python 的 requests 模块就是你的不二之选。它功能强大、使用简单,是初学者和老手都非常喜爱的网络请求库。在这篇文章中,我将带你一步步了解 requests 的常用功能,并通过详细的代码示例,帮助你轻松上手。

Requests 是什么?

requests 是一个用于发送 HTTP 请求的 Python 库。它提供了简洁的 API,让你可以轻松地与网页和服务器进行交互。例如,当你要从一个网站获取数据、提交表单或上传文件时,requests 都能帮你搞定。

为什么用 Requests?

• 简单易用:不需要像 urllib 那样处理复杂的参数和编码问题,直接使用简单的函数调用。
• 功能丰富:支持发送 GET、POST 等多种 HTTP 请求,还能处理会话保持、文件上传、SSL 认证等操作。
• 智能处理:requests 会自动处理 HTTP 请求的重定向、编码、Cookie 等,让你专注于核心逻辑。

如何安装 Requests?

在使用 requests 之前,你需要通过 pip 来安装它:

pip install requests

常用方法及场景

1. 发起 GET 请求

场景:你想从网页获取数据,例如抓取网页内容或者调用 API。

import requests
​
# 发起 GET 请求,获取网页或 API 数据
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')# 打印返回的内容(页面的文本)
print(response.text)

2. 发起 POST 请求

场景:你需要向服务器发送数据,例如提交表单或者上传信息。

import requests
​
# 构造需要发送的数据
data = {'username': 'test', 'password': '123456'}# 发起 POST 请求并提交数据
response = requests.post('https://jsonplaceholder.typicode.com/posts', data=data)# 打印响应的状态码,200 表示请求成功
print(response.status_code)

解释:requests.post() 用于向服务器发送数据,常用于提交表单、上传文件等操作。data 参数是需要传递的数据,服务器会处理这些数据并返回相应的响应。

3. 处理 JSON 响应

场景:API 返回的通常是 JSON 格式的数据,你需要将其转为字典方便处理。

import requests
​
# 向 API 发送 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')# 将 JSON 响应解析为字典
json_data = response.json()# 打印 JSON 数据
print(json_data)

4. 发送带参数的 GET 请求

场景:你想通过 URL 向服务器传递查询参数,比如根据条件获取特定内容。

import requests
​
# 构造查询参数
params = {'userId': 1}# 发起带参数的 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)# 打印返回的内容
print(response.text)

5. 文件上传

场景:你需要将文件上传到服务器,比如上传图片或文档。

import requests
​
# 打开需要上传的文件
file = {'file': open('example.txt', 'rb')}# 发起文件上传请求
response = requests.post('https://httpbin.org/post', files=file)# 打印服务器响应内容
print(response.text)

6. 设置请求头

场景:有时候,服务器需要你在请求中添加一些自定义信息(比如用户代理、认证信息等)。

import requests
​
# 自定义请求头
headers = {'User-Agent': 'Mozilla/5.0'}# 发送带自定义头的 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts', headers=headers)# 打印响应的文本内容
print(response.text)

解释:通过 headers 参数,你可以为请求添加自定义的头部信息。比如通过修改 User-Agent,可以伪装成浏览器访问网站。

7. 处理超时

场景:为了避免程序因请求卡住,你可以设置请求的超时时间。

import requests
​
try:
    # 设置超时时间为 3 秒
    response = requests.get('https://jsonplaceholder.typicode.com/posts', timeout=3)
    print(response.text)
except requests.Timeout:
    print("请求超时!")

解释:timeout 参数可以指定请求等待的时间,防止因网络问题导致请求卡住。当超过设定的时间后,会抛出 requests.Timeout 异常

8. 会话保持(模拟登录)

场景:你需要在多个请求中保持登录状态,比如向同一个网站发起多次请求。

import requests
​
# 创建会话对象
session = requests.Session()# 登录网站,保持会话
login_data = {'username': 'test', 'password': '123456'}
session.post('https://example.com/login', data=login_data)# 使用会话对象发起其他请求
response = session.get('https://example.com/dashboard')# 打印响应内容
print(response.text)

解释:使用 requests.Session(),可以在多个请求之间保持同一个会话(比如保存登录状态的 Cookie)。这非常适合需要模拟登录后的操作。

小结

requests 模块为 Python 程序员提供了一个简洁、高效的工具,用于发起 HTTP 请求。不论是简单的 GET 请求、POST 提交数据,还是更复杂的文件上传、会话保持,requests 都能让你轻松应对。在现代 Web 开发和数据采集中,掌握 requests 模块是非常有用的技能。

显示全文