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

使用Selenium或pywebcopy爬取足球数据页面无法获取目标API数据的问题咨询

解决爬取球员统计数据的问题建议

一、先解决页面加载不完整的问题

  • 你用pywebcopy时设置了delay=None,这会导致页面还没等JS调用API加载完数据就被保存,把delay改成具体数值(比如delay=5,单位秒),给页面足够的加载时间。
  • Selenium爬取时,别直接拿初始页面源码,要等待目标数据对应的元素加载完成,比如用WebDriverWait等待球员统计表格出现,再去获取内容,而不是盲目找JSON。

二、直接抓取API接口(更高效)

  1. 抓包找API:打开浏览器F12进入Network标签,刷新页面后筛选XHR/Fetch类型的请求,找到返回球员统计数据的API接口。
  2. 模拟请求拿数据:
    • 复制该API的请求URL、请求头(重点是Cookie、Authorization这类可能用于认证的字段)和参数。
    • 用requests库直接请求,示例代码:
      import requests
      import json
      
      # 从浏览器开发者工具复制真实请求头
      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',
          'Cookie': '这里填浏览器里的Cookie值',
          # 如有其他认证头(比如Authorization)也加上
      }
      
      api_url = '抓包得到的API接口地址'
      response = requests.get(api_url, headers=headers)
      stats_data = response.json()
      
      # 保存数据到文件
      with open('player_stats.json', 'w', encoding='utf-8') as f:
          json.dump(stats_data, f, ensure_ascii=False, indent=2)
      
  3. 处理认证:如果API需要登录才能访问,先模拟登录网站获取有效的Cookie或Token,再携带这些信息请求API。

三、优化Selenium的使用方式

如果不想抓API,用Selenium直接提取页面渲染后的数据:

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

driver = webdriver.Chrome()
driver.get('https://www.scoresway.com/en_GB/soccer/eerste-divisie-2022-2023/1w03tfpd5nc6woo8j2nc9239w/match/view/50ytn2x7zvgjl6v7lunp4eh3o/player-stats')

# 等待球员统计表格加载完成,超时时间10秒
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, 'table[class*="player-stats"]'))
)

# 提取表格数据
rows = driver.find_elements(By.CSS_SELECTOR, 'table[class*="player-stats"] tr')
player_stats = []
# 跳过表头行
for row in rows[1:]:
    cols = row.find_elements(By.TAG_NAME, 'td')
    # 提取每列文本
    stat_row = [col.text.strip() for col in cols if col.text.strip()]
    player_stats.append(stat_row)

# 打印或保存数据
print(player_stats)
with open('player_stats_selenium.json', 'w', encoding='utf-8') as f:
    json.dump(player_stats, f, ensure_ascii=False, indent=2)

driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:22:28