温馨提示×

python爬虫requests怎样处理重定向

小樊
81
2024-12-11 11:14:21
栏目: 编程语言

在Python的requests库中,处理重定向非常简单。默认情况下,requests会自动处理HTTP重定向(例如,从HTTP到HTTPS)。如果你想要自定义处理重定向的行为,可以通过设置allow_redirects参数来实现。

以下是一个简单的示例:

import requests

url = 'http://example.com'  # 这是一个带有重定向的URL

# 默认情况下,requests会自动处理重定向
response = requests.get(url)

print(response.url)  # 输出最终的URL,可能是重定向后的URL
print(response.status_code)  # 输出HTTP状态码,200表示成功,3xx表示重定向

如果你想要禁用自动重定向处理,可以将allow_redirects参数设置为False

import requests

url = 'http://example.com'  # 这是一个带有重定向的URL

# 禁用自动重定向处理
response = requests.get(url, allow_redirects=False)

print(response.url)  # 输出请求的URL,而不是重定向后的URL
print(response.status_code)  # 输出HTTP状态码,3xx表示重定向

如果你想要自定义重定向的行为,例如只允许特定的重定向状态码,可以使用allow_redirects参数的rules参数。rules参数是一个函数,该函数接受一个RedirectInfo对象作为参数,并返回一个布尔值,表示是否允许重定向。

以下是一个示例:

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

url = 'http://example.com'  # 这是一个带有重定向的URL

# 自定义重定向行为,只允许301和302状态码的重定向
def allow_redirects(redirect_info):
    return redirect_info.response.status_code in (301, 302)

# 创建一个Session对象,并设置重定向策略
session = requests.Session()
adapter = HTTPAdapter(max_retries=Retry(total=3, redirect=3, status_forcelist=[301, 302], allowed_methods=["HEAD", "GET", "OPTIONS"]))
session.mount("http://", adapter)
session.mount("https://", adapter)

# 使用自定义的Session对象发送请求
response = session.get(url)

print(response.url)  # 输出最终的URL,可能是重定向后的URL
print(response.status_code)  # 输出HTTP状态码,200表示成功,3xx表示重定向

在这个示例中,我们创建了一个Session对象,并使用HTTPAdapter设置了重定向策略。max_retries参数表示允许的最大重试次数,redirect参数表示允许的重定向次数,status_forcelist参数表示允许的重定向状态码列表,allowed_methods参数表示允许的HTTP方法。

0