使用Beautiful Soup爬取网页时获取两队分差返回空列表的问题
解决网页爬取分差返回空列表的问题
我来帮你搞定这个爬取分差的问题!你遇到的find_all返回空列表的情况,大概率是下面这两个原因之一,咱们一步步来排查:
1. 内容是JavaScript动态加载的
requests.get()只能获取网页的初始静态HTML,但很多体育比分网站的实时数据(比如你要的分差)是通过JavaScript动态渲染出来的。这时候初始HTML里根本没有match-history-diff-score-inc这个类的元素,自然返回空列表。
解决办法:用浏览器自动化工具模拟加载
比如用Selenium来模拟浏览器打开页面,等JS加载完再抓取元素。步骤如下:
- 先安装Selenium:
pip install selenium - 下载对应浏览器的驱动(比如ChromeDriver),确保和浏览器版本匹配
- 用下面的代码试试:
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 url = 'https://www.mismarcadores.com/partido/Q942gje8/#punto-a-punto;1' # 初始化浏览器驱动(这里用Chrome,你也可以换成Firefox等) driver = webdriver.Chrome() driver.get(url) try: # 等待最多10秒,直到目标元素加载完成 diff_elements = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'match-history-diff-score-inc')) ) # 打印所有分差内容 for elem in diff_elements: print(f"分差:{elem.text}") finally: # 不管成功失败,最后关闭浏览器 driver.quit()
2. 元素选择器不准确
网站可能更新了页面结构,你用的match-history-diff-score-inc类名已经失效了。
解决办法:检查真实DOM结构
打开目标网页,按F12打开开发者工具:
- 用“选择元素”工具点击分差元素,查看它的真实class、标签或者其他属性
- 比如可能现在分差元素的class变成了
match-history-diff-score,或者嵌套在div标签里,这时候需要调整选择器
额外小技巧:直接抓API接口
很多网站的比分数据是通过API接口返回的,你可以在开发者工具的「Network」面板里,筛选XHR/Fetch请求,找到返回分差数据的接口,直接请求这个接口拿JSON数据,比爬HTML效率更高,也更稳定。
最后提醒一句:爬取网站数据时要遵守网站的robots.txt规则,不要频繁请求,避免触发反爬机制哦!
内容的提问来源于stack exchange,提问作者Víctor
相关产品推荐
相关产品推荐

