问题标签 [splash-js-render]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
284 浏览

scrapy - scrapy-splash 爬虫启动速度快但速度慢(不受网站限制)

我通过scrapy-splash python包使用splash浏览器用scrapy编写了一个爬虫。我正在使用 aquarium python 包将并行的scrapy请求负载平衡到一个splash docker集群。

刮板使用一长串 url 作为 start_urls 列表。没有通过 href 或分页从页面到页面的“爬行”。

我正在运行六个启动程序,每个启动程序有 5 个插槽作为负载平衡的浏览器集群。我在六个并发请求上运行scrapy。

开发机器是具有双核 2.4Ghz CPU 和 16Gb RAM 的 macbook pro。

当蜘蛛启动时,水族馆标准输出显示快速请求/响应,板载风扇旋转并且系统以 90% 的使用率和 10% 的空闲率运行,因此我不会使系统资源过载。内存/交换也没有耗尽。

此时,我的速度非常慢~30 页/分钟。几分钟后,风扇停止运转,系统资源显着空闲(>60% 空闲),scrapy 日志显示每个请求都有 503 超时。

当我查看水族馆集群的标准输出时,有正在处理的请求,尽管与第一次调用蜘蛛时相比非常慢。

如果我到达 localhost:9050,我确实会在 10 秒左右后获得启动页面,因此负载平衡器/启动程序是在线的。

如果我停止蜘蛛并重新启动它,它会正常启动,所以这似乎不是来自目标站点的限制,因为蜘蛛重新启动也会受到限制,但事实并非如此。

我感谢社区可以提供的任何见解。

谢谢。

0 投票
2 回答
1136 浏览

python-3.x - Splash 不使用文档中描述的 3 种方式中的任何一种连接到代理

Splash 浏览器不会通过 http 代理发送任何内容。即使代理未运行,也会获取页面。

在对 Angular.js 网站进行身份验证后,我在 python 3 中使用带有 splash 的 scrapy 来获取页面。该脚本能够获取页面、验证和验证后获取页面。但是,它不使用 localhost:8090 的代理设置,wireshark 确认来自端口 8050 的流量会流向 50k 范围内的某个端口。

设置是 - 在端口 8050 上的 docker 映像(最新)上本地运行的飞溅 - 在 mac 上本地运行的 python 3 - 在端口 8090 的 mac 上本地运行的 Zap 代理 - 通过 VPN 访问的网页

我尝试使用带有 LUA 脚本的 Chrome 通过服务器指定代理主机:端口。页面是在没有代理的情况下获取的。

我试图在 python 脚本中使用 Lua 和 api (args={'proxy':'host:port'} 指定代理,并且在不使用代理的情况下获取页面。

我尝试使用代理主机文件,我得到状态 502。

  1. 在 Chrome 上通过 Lua 设置代理(无错误,未代理):
  1. 通过 api 设置的代理(状态 502):
  1. 在 Python 中通过 Lua 设置代理(无错误,未代理):
  1. 通过 docker 镜像中的代理文件设置代理(状态 502):代理文件:

外壳命令:

以上所有内容都应在端口 8090 的 zap 代理中显示页面。

上面的一些似乎设置了代理,但是代理无法到达localhost:8090(状态502)。有些根本不起作用(没有错误,没有代理)。我认为这可能与正在使用 docker 映像有关。

我不打算使用 Selenium,因为这就是它的替代品。

0 投票
1 回答
260 浏览

python - Scrapy 不会在 response.css 上获取标记

我已经构建了一个在 scrapinghub 上运行的简单爬虫:

我面临的问题是 multiple_locs_url response.css 返回一个空数组,尽管我在浏览器端的标记中看到它。

我检查了scrapy shell,scrapy shell 没有看到标记。我猜这是由于加载页面时通过 javascript 呈现的标记。

我添加了 splash 但这似乎不适用于响应。我如何让scrapy等待查询直到页面加载?

0 投票
0 回答
503 浏览

javascript - 如何在 Splash 中启用 javascript

我最近被介绍给Splash。我目前正在尝试在splash API中呈现我工作的公司的网页(我不想命名公司)。当我尝试在 Splash API 中呈现页面时,html 包含一条消息:

起初我不明白这个错误来自哪里,直到我在浏览器中禁用了 Javascript 并手动访问了该站点。在没有启用 Javascript 的情况下,我在返回的 Splash html 中找到的相同文本现在在我的浏览器中可见:

奇怪的是,当我通过在 API 中运行以下脚本来检查是否在启动时启用了 Javascript 时:

我得到以下图像:

在此处输入图像描述

似乎启用了Javascript就好了...

问题:为什么这个网站响应我的请求,好像我禁用了 Javascript?我该如何解决这个问题?我应该添加手动命令来启用 Splash 吗?(抱歉,我了解到我无法提供有关我正在尝试访问的网站的信息,这很烦人。)

编辑:要查看我要呈现的网站中的 html,我使用以下脚本:

0 投票
1 回答
851 浏览

python - Scrapy 和 Incapsula

我正在尝试使用带有 Splash 的 Scrapy 从网站“whoscored.com”检索数据。这是我的设置:

在此之前,我只使用 Splash,并且在被 Incapsula 阻止之前至少可以请求 2 或 3 页。但是使用 Scrapy,我在发出第一个请求后立即被阻止。

为什么我那么容易被屏蔽?我应该更改我的设置吗?

先感谢您。

0 投票
0 回答
70 浏览

lua - 在字符串中使用正斜杠时出错

当我尝试在字符串中使用正斜杠时出现错误:

如果我把飞溅出来没关系,我需要逃避正斜杠吗?

编辑

我在 DOM 上下文中将它与 evaljs 一起使用,错误是:“SyntaxError: Dom exception 12”

0 投票
1 回答
313 浏览

python - 转义飞溅:在 lua 代码中选择查询选择器

我想不出正确的方法来逃避splash:select

我在 scrapy 中有一个使用 lua 等待特定元素的启动请求。此元素是 id 中带有句点的 id。我似乎无法正确逃避这些时期。我已经尝试过单反斜杠和双反斜杠(\\\

预期结果是来自请求页面的完全加载的 html

实际结果是:

当使用\\\

如果我尝试转义其中的字符串splash:select

代码连续运行(我相信这是朝着正确方向迈出的一步,但我认为在这个阶段代码运行正确,但它试图找到一个多类 div 而不是 ID 包含句点的 div)

0 投票
2 回答
264 浏览

docker - Google App Engine:为 Scrapy + Splash 加载另一个 Docker 映像

我想在 Google App Engine 中使用 Scrapy + Splash 抓取一个 javascript 网站。Splash 插件是一个 Docker 镜像。有没有办法在 Google App Engine 中使用它?App Engine 本身使用 Docker 映像,但我不确定如何加载和访问辅助映像(这就是 Splash 的使用方式)。这是 Splash 安装说明

0 投票
0 回答
362 浏览

windows - 如何在 Windows Home 上安装 Splash?

我找到的安装说明和所有文章都谈到了通过 Docker 安装。

但是,Windows Home 不支持 Docker,只有 Windows Pro 支持。

如何在 Windows Home 上安装 Splash?

0 投票
0 回答
121 浏览

headless-browser - 为什么 Splash 无头浏览器无法获取 Linkedin 的页面

我试图获取Linkedin的页面来源。但我什至无法获取一个 URL。我收到类似“加载页面失败”的响应

样品很少, https ://www.linkedin.com/company/amazon https://www.linkedin.com/company/apple

初始版本:3.4 操作系统:Ubuntu

请帮我解决这个问题。