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

Python requests.get请求网站返回浏览器过时错误该如何解决?

问题原因

  • 首先requests默认发送的请求头User-Agent会明确标识自身为爬虫客户端,被网站反爬策略识别后就会返回浏览器版本过时的提示
  • 切换年份页面URL不变,说明表格数据是前端异步加载后动态渲染的,原始静态HTML中不存在完整表格内容,因此pandas.read_html无法直接解析到目标数据

可行解决方案

方案1:修改请求头伪装浏览器(优先尝试)

先给请求添加正常浏览器的User-Agent,绕过基础反爬验证,确认是否能直接拿到数据:

import pandas as pd
import requests

farmers_url = 'https://www.pgatour.com/tournaments/farmers-insurance-open/past-results.html'
# 可自行替换为你当前使用浏览器的真实User-Agent,搜索"我的UA"即可获取
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"
}
response = requests.get(farmers_url, headers=headers)
farmers = pd.read_html(response.text, header=0)[0]
print(farmers.head())

如果该方案还是拿不到表格,说明数据确实是动态渲染的,可使用下面两个方案。

方案2:抓取异步数据接口(效率最高)

打开浏览器开发者工具(按F12),切换到「网络」面板,筛选「XHR/提取」类别,然后手动切换页面上的年份选项,观察网络请求列表里新增的请求,找到返回格式为JSON、内容包含表格数据的接口,直接请求该接口即可。这类接口通常会带年份参数,修改参数就能批量获取不同年份的赛事数据,不需要解析HTML页面,效率远高于其他方案。

方案3:用无头浏览器渲染动态页面(兼容性最好)

如果找不到接口,就用Selenium、Playwright这类工具模拟浏览器运行,等待页面JS执行完毕、表格完全渲染后,再提取页面源码交给pandas解析,Selenium版本示例代码如下:

import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

chrome_options = Options()
# 无头模式,不弹出浏览器窗口
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("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")

driver = webdriver.Chrome(options=chrome_options)
farmers_url = 'https://www.pgatour.com/tournaments/farmers-insurance-open/past-results.html'
driver.get(farmers_url)
# 等待页面加载完成,可根据实际网络情况调整等待时长
time.sleep(3)
# 如果需要切换年份,可模拟点击年份选择按钮后再等待加载完成
page_source = driver.page_source
farmers = pd.read_html(page_source, header=0)[0]
print(farmers.head())
driver.quit()

内容的提问来源于stack exchange,提问作者Ryan Miller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:11