Scrapy爬取返回HTML模板而非渲染后页面源码该如何配置
问题原因
这个问题和Scrapy配置遗漏无关,目标页面的数值是前端JavaScript动态渲染填充的:你用Scrapy直接请求拿到的是服务端返回的原始页面模板,浏览器访问时会自动执行页面内置的JS代码,拉取对应数据替换{{xxx}}这类模板变量,Scrapy默认不具备JS执行能力,因此只能拿到未填充的模板内容。
可行解决方案
方案1:直接抓取数据接口(优先推荐)
打开浏览器F12开发者工具的「网络」面板,刷新页面后筛选「XHR/ Fetch」类请求,找到返回numeroVerdePA、numeroVerdeIM这类变量值的后端接口,直接用Scrapy请求该接口获取结构化数据,比解析页面效率更高。请求时注意带上和浏览器一致的请求头(比如User-Agent、Referer等),避免被站点拦截。
方案2:对接JS渲染工具加载完整页面
如果找不到对应接口或者接口加密逻辑复杂,可以搭配JS渲染工具获取渲染后的完整页面:
- 可以使用
scrapy-splash插件对接Splash服务,请求时指定用Splash渲染页面后再返回内容 - 也可以使用
scrapy-playwright集成包对接无头浏览器,只需要给请求添加meta={"playwright": True}参数,就能拿到JS执行完成后的渲染结果,现有代码改动量很小。
内容的提问来源于stack exchange,提问作者net_programmer
相关产品推荐
相关产品推荐

