温馨提示×

requests爬虫如何处理重定向

小樊
82
2024-12-11 07:21:15
栏目: 编程语言

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

以下是一些关于如何处理重定向的示例:

  1. 默认情况下,requests会处理重定向:
import requests

response = requests.get('http://example.com')
print(response.url)  # 输出重定向后的URL
  1. 如果你想要禁用重定向处理,可以将allow_redirects参数设置为False
import requests

response = requests.get('http://example.com', allow_redirects=False)
print(response.url)  # 输出请求的URL,不会自动处理重定向
  1. 如果你想要自定义最大重定向次数,可以将allow_redirects参数设置为一个整数:
import requests

response = requests.get('http://example.com', allow_redirects=3)
print(response.url)  # 输出重定向后的URL,最多允许3次重定向
  1. 如果你想要自定义重定向策略(例如,只允许特定HTTP状态码的重定向),可以使用allow_redirects参数的rules属性:
import requests
from urllib.parse import urlparse, urljoin

def is_valid_redirect(redirect_url, allowed_status_codes):
    parsed_url = urlparse(redirect_url)
    return bool(parsed_url.scheme and parsed_url.netloc and any(status_code in allowed_status_codes for status_code in range(300, 400)))

base_url = 'http://example.com'
redirect_url = 'http://example.org'
allowed_status_codes = [301, 302]

redirect_response = requests.get(base_url, allow_redirects=lambda r: is_valid_redirect(urljoin(base_url, r.url), allowed_status_codes))
print(redirect_response.url)  # 输出符合自定义策略的重定向后的URL

在这个示例中,我们定义了一个is_valid_redirect函数来检查重定向URL是否有效。然后,我们使用allow_redirects参数的rules属性来应用自定义重定向策略。

0