如何用Python爬取Trading212带显示全部按钮的全股票表格
爬取目标表格的核心问题排查与解决
为什么你找不到目标表格的class属性
Trading212的目标页面属于前端动态渲染架构,有两个很容易踩坑的点:
- 页面DOM元素的class名带有前端框架自动生成的哈希后缀,每次前端版本迭代就会变更,没有固定的、可以硬编码匹配的稳定class值,硬找固定class的思路本身就不具备长期稳定性
- 你通过requests拿到的初始页面源码里,根本不存在“点击Show all”之后的完整表格DOM节点——初始HTML里的表格只是服务端预渲染的前几行占位内容,不是全量数据的载体
为什么你只能拿到未展开的部分行数据
这个现象的本质非常直接:页面上的“Show all”按钮点击逻辑,不是把藏在HTML里的隐藏行显示出来,而是前端触发了异步数据请求,等接口返回全量股票列表数据后,再重新把所有行渲染到表格DOM里。
说白了,你现在手里的requests响应内容,压根没有包含全量表格的节点,不管你怎么调整BeautifulSoup的匹配规则,都不可能从这份静态源码里扒到展开后的完整内容。
可落地的解决路径
路径1:直接对接背后的数据接口(性能最优,适配现有技术栈)
- 打开浏览器的开发者工具,切换到网络请求面板,筛选XHR类型的请求,手动点击页面上的“Show all”按钮,捕获返回全量股票列表的接口请求
- 摸清该接口的请求头、请求参数(尤其是分页相关的参数,把单页返回条数调整到最大,避免数据被分页拆分),直接用现有的
requests逻辑请求这个接口,拿到的JSON数据可以直接用pandas转成规整的表格,不需要再花精力解析HTML
路径2:用浏览器自动化完成交互后再解析
如果不想逆向接口的参数、签名逻辑,可以替换当前的静态请求逻辑:
- 用Playwright、Selenium这类自动化工具加载目标页面,等页面加载完成后自动定位“Show all”按钮触发点击,等待全量表格渲染完成
- 把自动化工具拿到的、已经渲染完成的页面源码,丢给你现有的BeautifulSoup解析逻辑,不需要大改已经写好的解析代码
- 定位表格的时候,可以绕开不稳定的class匹配逻辑:先找到包含“ALL EQUITIES”文本的标题节点,顺着DOM树向下遍历找到相邻的table元素,比硬猜class名的成功率高很多
注意:纯requests拿静态源码的思路,从根上就拿不到点击Show all后的全量数据,不要在这个方向死磕调整匹配规则。
内容的提问来源于stack exchange,提问作者user3568896
相关产品推荐
相关产品推荐

