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

BS4的find_all方法无法捕获全部指定class的div标签问题求助

问题:爬取网页时仅获取到一个目标class元素的原因分析

我正在爬取URL:https://baloncestoenvivo.feb.es/partido/2218269,想要获取所有class为box-datos-partido的div元素。

执行代码:

soup.find_all("div", class_="box-datos-partido")

仅得到一个元素的数组,该元素内容为:

<div class="box-datos-partido">
    <div class="fecha">
        <span class="label">Fecha</span>
        <span class="txt">31/10/2021 - 12:00</span>
    </div>
    <div class="arbitros">
        <span class="label">Árbitros</span>
        <span class="txt referee">DIAZ DE SARRALDE MARTIN, IÑIGO</span>
        <span class="txt referee">SANCHEZ NUÑEZ, UNAI</span>
        <span class="txt referee"></span>
    </div>
    <div class="pista">
        <span class="label">Pista</span>
        <span class="txt pabellon">POLIDEPORTIVO URRETA</span>
        <span class="txt direccion">Galdakao (Vizcaya)</span>
    </div>
</div>

但网页实际存在两个该class的div元素,其内容应为:

<div class="box-datos-partido">
    <div class="fecha">
        <span class="label">Fecha</span>
        <span class="txt">31-10-2021 - 12:00</span>
    </div>
    <div class="arbitros">
        <span class="label">Árbitros</span>
        <span class="txt referee">DIAZ DE SARRALDE MARTIN, IÑIGO</span><span class="txt referee">SANCHEZ NUÑEZ, UNAI</span><span class="txt referee"></span>
    </div>
    <div class="pista">
        <span class="label">Pista</span>
        <span class="txt pabellon">POLIDEPORTIVO URRETA</span><span class="txt direccion">BIZKAIA KALEA, S/N, Vizcaya (Galdakao)</span>
    </div>
</div>

<div class="box-datos-partido">
    <div class="fecha">
        <span class="label">Fecha</span>
        <span class="txt">31/10/2021 - 12:00</span>
    </div>
    <div class="arbitros">
        <span class="label">Árbitros</span>
        <span class="txt referee">DIAZ DE SARRALDE MARTIN, IÑIGO</span>
        <span class="txt referee">SANCHEZ NUÑEZ, UNAI</span>
        <span class="txt referee"></span>
    </div>
    <div class="pista">
        <span class="label">Pista</span>
        <span class="txt pabellon">POLIDEPORTIVO URRETA</span>
        <span class="txt direccion">Galdakao (Vizcaya)</span>
    </div>
</div>

可能的原因:

  • 动态内容加载:第二个box-datos-partido元素是通过JavaScript动态渲染生成的。如果用requests这类仅获取静态HTML的工具,拿到的页面初始源码里不会包含JS加载的内容,自然无法被BeautifulSoup捕获。
  • 条件渲染/元素隐藏:第二个div可能在页面初始状态下是隐藏的(比如通过CSS设置display: none),或者需要触发特定操作(如切换视图、登录)才会显示,直接爬取的初始页面不会包含该元素。
  • 工具局限性:BeautifulSoup本身不具备执行JavaScript的能力,只能解析静态HTML。要获取动态渲染的内容,需要使用Selenium、Playwright这类能模拟浏览器运行环境的工具。

内容的提问来源于stack exchange,提问作者José Carlos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:37:02