Splash 在返回 HTML 响应之前不解析 JS

Splash not parse JS before returning HTML response

在我的由 Scrapy 和 Splash 服务器组成的爬虫中,我在这个网站上遇到了问题:https://www.lavoropiu.it/offerte

此问题与 Splash 在未解析 JS 的情况下下载站点的 HTML 有关。该网站是一个 Angular 应用程序。

我尝试过不同的启动设置:

splash.private_mode_enabled = false

splash.js_enabled = true

返回的HTML是这样的:

<!DOCTYPE html><html lang="en"><head>
<meta charset="utf-8">
<title>Lavoropiu</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/chphsalvo/front-end-framework@0.9.3/dist/css/style.min.css">

<!-- Global site tag (gtag.js) - Google Analytics -->
<script type="text/javascript" async="" src="https://www.google- analytics.com/analytics.js"></script><script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-173597693-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());

gtag('config', 'UA-173597693-1', { send_page_view: false});
</script>

<link rel="stylesheet" href="styles.66ab468982a30141059e.css">
</head>
<body>

<script src="runtime.d6c52737d4587c65265f.js" defer=""></script>
<script src="polyfills.f782e0cdb7e1242a13e4.js" defer=""></script>
<script src="vendor.82696fd86eeed5072685.js" defer=""></script>
<script src="main.076dbf684e565ed2798b.js" defer=""></script>

<app-root></app-root>

</body>
</html>

如您所见,Splash 在返回 HTML 之前不会执行页面上的脚本。 这是与 Splash 相关的问题还是我缺少某些设置?

感谢您的帮助。

Splash 无法加载 javascript。这是使用 Splash 进行抓取时遇到的常见问题。检查 issue page of Splash 并进行一些搜索,有很多关于 javascript 加载问题的报告。

Splash 的默认引擎是 Webkit。它与 Chrome、Firefox 中的常见 Web 浏览器引擎的行为不同。对于网络抓取,你最好选择无头 Chrome 来下载带有 javascript 的页面。

对于与 scrapy 的异步集成,请尝试 playwright, or puppeteer. The former has a scrapy plugin scrapy-playwright,目前正在维护。


更新:Scrapy API render.html 支持将引擎切换到“chromium”。但这是实验性的。你可以试试。