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

Python抓取AJAX动态网页表格数据求助

解决PSE网页AJAX表格数据抓取问题

常见问题排查与解决方法

1. 补全关键请求头

多数网站会校验请求头的核心字段,缺失会导致返回空内容。必须带上的字段包括:

  • User-Agent:模拟真实浏览器标识
  • Referer:标识请求来源页面
  • X-Requested-With:标记为AJAX请求
  • 必要的Cookie:部分网站需要会话Cookie验证

示例代码:

import requests

# 替换为你找到的AJAX请求URL
target_api_url = "你的AJAX请求地址"
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",
    "Referer": "https://www.pse.pl/dane-systemowe/funkcjonowanie-kse/raporty-godzinowe-z-funkcjonowania-rb/iteracje-obslugi-use-w-ramach-rbb",
    "X-Requested-With": "XMLHttpRequest",
    "Accept": "application/json, text/javascript, */*; q=0.01"
}

# 先访问原页面获取会话Cookie
session = requests.Session()
session.get("https://www.pse.pl/dane-systemowe/funkcjonowanie-kse/raporty-godzinowe-z-funkcjonowania-rb/iteracje-obslugi-use-w-ramach-rbb")
# 发送AJAX请求
response = session.get(target_api_url, headers=headers)

print(response.text)

2. 核对请求参数

对比浏览器F12面板中真实请求的参数,确保你构造的参数完全一致:

  • 检查参数的大小写、格式(比如日期是否为YYYY-MM-DD格式)
  • 确认分页、筛选等参数没有遗漏

3. 确认请求方式

部分AJAX请求使用POST而非GET,如果浏览器中显示请求方法是POST,需调整代码:

# 示例POST请求,参数放在json字段中
payload = {
    "date": "2024-05-20",
    "page": 1
}
response = session.post(target_api_url, headers=headers, json=payload)

4. 处理动态生成参数

如果请求包含动态参数(如csrf-token、时间戳),需先从原页面HTML中提取:

from bs4 import BeautifulSoup

# 获取原页面HTML
page_html = session.get("https://www.pse.pl/dane-systemowe/funkcjonowanie-kse/raporty-godzinowe-z-funkcjonowania-rb/iteracje-obslugi-use-w-ramach-rbb").text
soup = BeautifulSoup(page_html, "html.parser")
# 提取页面中的csrf token(示例,根据实际页面结构调整)
csrf_token = soup.find("meta", attrs={"name": "csrf-token"})["content"]

# 将token加入请求头或参数
headers["X-CSRF-Token"] = csrf_token

5. 模拟浏览器加载(终极方案)

如果网站有复杂反爬机制,直接用Selenium模拟浏览器渲染页面:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.pse.pl/dane-systemowe/funkcjonowanie-kse/raporty-godzinowe-z-funkcjonowania-rb/iteracje-obslugi-use-w-ramach-rbb")

# 等待表格加载完成
table = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, "table"))
)

# 提取表格数据
rows = table.find_elements(By.TAG_NAME, "tr")
for row in rows:
    cols = row.find_elements(By.TAG_NAME, "td")
    print([col.text for col in cols])

driver.quit()

内容的提问来源于stack exchange,提问作者Nice Guy Eddie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:55:05