Python requests.get请求网站未返回全部元素 无法获取目标赛程数据
问题原因
- 你要爬取的网站内容是客户端JavaScript动态渲染生成的,
requests.get()只能拿到服务器返回的原始静态HTML文本,此时动态内容还没被渲染出来,所以自然匹配不到目标dtr-data类的span元素。
可行解决方案
方案1:抓包获取后端数据接口
打开浏览器开发者工具的「网络」标签,刷新页面后筛选XHR/fetch请求,找到网站加载赛程数据的后端接口,直接请求接口拿JSON格式数据,这个方式效率最高。示例逻辑如下:
import requests # 替换为你抓包拿到的实际赛程数据接口地址 api_url = "对应数据接口地址" 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" } res = requests.get(api_url, headers=headers) # 接口返回JSON格式,直接解析即可拿到所有赛程数据 fixture_data = res.json()
方案2:使用支持渲染JS的爬取工具
如果找不到对应接口,可以用Selenium、Playwright这类模拟浏览器运行的工具,等页面JS渲染完成后再提取元素,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("http://www.fplstatistics.co.uk/") # 等待目标元素加载完成,最长等待10秒 wait = WebDriverWait(driver, 10) allFixtures = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "span.dtr-data"))) print(allFixtures.text) driver.quit()
额外注意:发起请求时建议携带
User-Agent请求头模拟正常浏览器访问,避免被网站的反爬策略拦截返回异常响应内容。
内容的提问来源于stack exchange,提问作者louis besson
相关产品推荐
相关产品推荐

