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
相关产品推荐
相关产品推荐

