使用BeautifulSoup进行网页爬取时无法定位目标span类元素问题
问题成因
- 该站点基于Angular框架构建,所有带
ng-前缀类名的元素都是客户端JavaScript运行后动态生成的。你使用requests发起请求仅能获取到未执行前端逻辑的初始HTML骨架,此时你要查找的span元素尚未被插入到DOM结构中,因此BeautifulSoup返回空列表。 - 即使调整为定位span所属父级div的写法也会返回空,本质原因都是静态请求无法拿到动态渲染的内容,和元素定位路径的层级没有关系。
可选解决思路
- 使用支持浏览器渲染的自动化工具(如Selenium、Playwright)发起请求,等待页面JS执行完成、元素加载完毕后再执行元素提取操作,示例代码如下:
from playwright.sync_api import sync_playwright from bs4 import BeautifulSoup as bs with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto("https://boardgamegeek.com/boardgame/174430/gloomhaven") # 等待目标元素加载完成 page.wait_for_selector(".ng-scope.ng-isolate-scope", timeout=10000) html = page.content() s2 = bs(html, "html.parser") var2 = s2.find_all('span',{'class':'ng-scope ng-isolate-scope'}) browser.close()
- 更稳定的方案是通过站点公开的结构化数据接口获取数据,无需解析前端页面,避免动态渲染、类名变更带来的兼容性问题。
内容的提问来源于stack exchange,提问作者Maadhav Padmanabhan
相关产品推荐
相关产品推荐

