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

如何不使用Selenium爬取JavaScript动态生成HTML的网页?

动态渲染页面无Selenium爬取方案(Python2兼容场景)

针对你现有Python2 + requests + BeautifulSoup的技术栈,且不使用Selenium的要求,可按优先级选择以下方案:


方案1:抓后端异步接口(优先推荐)

  • 打开浏览器开发者工具的「网络」面板,筛选Fetch/XHR分类,刷新页面后查看JS发起的异步请求,90%以上的动态内容都是通过这类请求拉取JSON格式数据返回的,直接用requests模拟请求对应接口即可,不需要解析页面
  • 注意匹配接口的请求头(比如User-Agent、Referer、自定义签名头)、请求参数(GET的query参数、POST的body参数),部分接口会有签名校验,按前端JS里的签名逻辑复刻即可
  • Python2版本的requests完全支持这类接口请求,拿到JSON后直接解析字段,比解析HTML效率高很多,也不容易受页面结构变动影响

方案2:直接提取JS内嵌数据

如果动态内容是直接硬编码在页面的内联JS变量里的,不需要执行JS也能拿到:

  • 用requests拉取原始页面源码后,用正则匹配JS里对应数据变量的取值,比如var pageData = {xxx};这种结构,直接把{xxx}部分抠出来用json库解析即可
  • 结构复杂的非标准JS对象可以用demjson库(Python2兼容)解析,不需要完全转成标准JSON就能读取字段
  • 这种方案性能最高,不需要额外依赖,只要页面JS结构没有大变动就可以稳定使用

方案3:轻量级JS引擎渲染页面内容

如果接口有强签名没法破解,或者数据需要执行JS才能生成,可以用轻量JS引擎跑页面代码生成完整DOM:

  • 先拿requests拉取原始页面源码,提取里面的内联JS或者外部JS链接
  • 用PyExecJS库(Python2兼容最新支持到1.5.1版本)调用本地Node.js环境执行页面JS,生成完整的DOM结构
  • 生成的DOM直接丢给BeautifulSoup按原来的逻辑解析即可,整个流程没有浏览器启动开销,比Selenium轻量很多

注意:Python2下安装PyExecJS直接执行pip install PyExecJS==1.5.1即可,优先搭配Node.js使用,比默认的PyV8兼容性好很多


Python2环境适配注意事项

  • 所有用到的第三方库要选支持Python2的最后版本,比如requests最高支持到2.27.1,BeautifulSoup4最高支持到4.9.3,不要安装最新版导致兼容报错

内容的提问来源于stack exchange,提问作者Gulshan Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 01:45:02