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

使用requests和BeautifulSoup无法定位英超赛事页面目标元素问题

英超官网爬虫元素定位失败解决方案

核心原因:

  • 英超官网绝大多数内容是JavaScript动态渲染生成的,requests发起的HTTP请求只能拿到未执行JS的初始静态HTML代码,不存在你要找的动态生成的DOM元素
  • 网站配置了基础反爬校验,请求头缺失User-Agent等标识时,会返回拦截页或不完整的页面内容

推荐解决方案(Selenium模拟浏览器,门槛低无需分析接口)

依赖安装

pip install requests beautifulsoup4 selenium webdriver-manager

可运行示例代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 初始化浏览器,去掉headless参数可可视化运行过程
options = webdriver.ChromeOptions()
options.add_argument('--headless=new')
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(service=Service(ChromeDriverManager().install()), options=options)
wait = WebDriverWait(driver, 10) # 元素最长等待加载时间10秒

try:
    # 步骤1:提取赛事链接
    result_page_url = "https://www.premierleague.com/results?co=1&se=363&cl=-1"
    driver.get(result_page_url)
    # 等待带目标属性的div加载完成
    match_div = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div[data-template-rendered][data-href]')))
    match_url = match_div.get_attribute('data-href')
    # 补全相对路径链接
    if not match_url.startswith('http'):
        match_url = f"https://www.premierleague.com{match_url}"
    print(f"提取到的赛事链接:{match_url}")

    # 步骤2:提取比赛统计数据
    driver.get(match_url)
    # 点击Stats标签
    stats_tab = wait.until(EC.element_to_be_clickable((By.XPATH, '//li[contains(text(),"Stats")]')))
    stats_tab.click()
    # 等待统计容器加载完成
    stats_container = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'matchCentreStatsContainer')))
    # 提取tbody内的统计数据
    stats_tbody = stats_container.find_element(By.TAG_NAME, 'tbody')
    stats_rows = stats_tbody.find_elements(By.TAG_NAME, 'tr')
    for row in stats_rows:
        print(row.text.strip())

finally:
    driver.quit()

可选高效方案

如果需要更高的爬取效率,可以通过浏览器F12开发者工具的「网络」面板,筛选XHR/Fetch请求,找到返回赛事列表、比赛统计数据的后端接口,直接请求接口获取JSON格式数据,无需解析DOM。需要注意保持和浏览器一致的请求头、请求参数,避免被拦截。

注意事项

  • 控制爬取频率,两次请求建议间隔1-2秒,避免触发频率限制被封IP
  • 仅将代码用于非商业的个人学习用途,遵守目标网站的robots协议

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:15:03