You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置网页爬虫避免重定向循环?Python requests爬Metacritic遇此问题

Metacritic爬虫重定向问题解决方案

用requests库抓取Metacritic是可行的,不一定非要用Selenium这类工具,但你需要模拟真实浏览器的请求特征,而不只是随便加个Cookie。以下是具体的解决思路:

一、补全完整的请求头

Metacritic会校验请求头的完整性,只带User-Agent远远不够,你需要模拟主流浏览器的全部核心请求头:

  • 必须包含真实的User-Agent:比如Chrome最新版本的UA字符串Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
  • 补充Accept、Accept-Language、Accept-Encoding、Referer这些字段,模拟浏览器的内容接收偏好

示例代码:

import requests
import time
import random

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate, br',
    'Referer': 'https://www.metacritic.com/',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1'
}

url = "https://www.metacritic.com/browse/games/score/metascore/all/pc/filtered"
session = requests.Session()

# 先请求主页获取初始Cookie
session.get("https://www.metacritic.com/", headers=headers)
# 加随机延迟模拟人类访问
time.sleep(random.uniform(1, 3))

response = session.get(url, headers=headers)
print(response.status_code)
print(response.text[:500])

二、正确处理Cookie

Cookie是关键,但不需要纠结具体哪几个字段,用会话保持即可:

  1. 用requests.Session()创建会话对象,它会自动保存和复用请求过程中获取的Cookie
  2. 如果会话自动获取的Cookie不够,可手动复制浏览器访问目标页面时的Cookie(在浏览器开发者工具的Network面板中查看),加到请求头的Cookie字段里

三、避免被判定为机器人

  • 每次请求后加1-3秒的随机延迟,避免固定间隔
  • 不要一次性抓取大量数据,分批次请求
  • 避免短时间内重复请求同一页面

什么时候需要用Selenium/Playwright?

如果上面的方法还是触发重定向循环,说明Metacritic启用了更严格的反爬机制,比如Cloudflare的人机验证(hCaptcha)或者需要执行JavaScript才能渲染页面。这时候用Selenium、Playwright这类工具更合适,它们会模拟真实浏览器的全部行为,包括JS执行、页面渲染,能绕过大部分基于浏览器特征的反爬。

内容的提问来源于stack exchange,提问作者Brendan McCauley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:52:38