使用Selenium或pywebcopy爬取足球数据页面无法获取目标API数据的问题咨询
解决爬取球员统计数据的问题建议
一、先解决页面加载不完整的问题
- 你用pywebcopy时设置了
delay=None,这会导致页面还没等JS调用API加载完数据就被保存,把delay改成具体数值(比如delay=5,单位秒),给页面足够的加载时间。 - Selenium爬取时,别直接拿初始页面源码,要等待目标数据对应的元素加载完成,比如用
WebDriverWait等待球员统计表格出现,再去获取内容,而不是盲目找JSON。
二、直接抓取API接口(更高效)
- 抓包找API:打开浏览器F12进入Network标签,刷新页面后筛选XHR/Fetch类型的请求,找到返回球员统计数据的API接口。
- 模拟请求拿数据:
- 复制该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)
- 复制该API的请求URL、请求头(重点是
- 处理认证:如果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
相关产品推荐
相关产品推荐

