问题标签 [apify]

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 投票
1 回答
710 浏览

apify - 如何使用 Apify SDK 自动选择 javascript 选项来抓取网站

我已阅读有关使用Apify SDK抓取网站的优秀文档,但需要一些帮助,因为PuppeteerCrawler的指南尚未完成

我想抓取的网站部分是成员目录。主页(我相信我需要提供 as RequestList)包含指向目录前 50 个成员的链接。要获取接下来的 50 个成员,有一个选项框,如下所示:

我不确定我将如何解决这个问题,除了我认为我需要PuppeteerCrawler给定用户输入(单击带有 的选项id="foo")是必需的。我需要做的是从首页开始,将所有 50 个链接添加到 中RequestQueue,然后选择下一批 50 个成员,然后冲洗并重复。

0 投票
1 回答
778 浏览

apify - 在 Apify 中,如何从嵌套函数中登录到控制台?

从 Apify 示例文档中,我可以看到,如果您使用console.log()within handlePageFunction,它会直接记录到终端控制台。Apify utils 也是如此log。例如:

但是,当我handlePageFunction 中定义自己的函数时,我无法将任何内容记录到终端控制台。我希望 console.log 会转到浏览器控制台,但在 Apify 中,浏览器窗口会迅速出现和消失。(也可以使用根本不显示浏览器的 apify-cli。)

如何在嵌套的 javascript 函数中使用 Apify utils.log?

0 投票
2 回答
882 浏览

javascript - CheerioCrawler:如何在提取数据之前确保页面已完全加载?

在过去的两天里,我一直在完善我想要抓取的网站的网址列表。我的脚本(除了数据提取之外与CheerioCrawler的示例基本相同)正在运行,但是有一个问题。本地保存在数据存储中的一些文档不完整。例如,在示例脚本中,某些已保存数据中的标题字段为空白。在其他人中,这一切都得到了保存。每次保存的唯一字段是url: request.url.

我最好的猜测是,我正在抓取的域非常慢,从其他域加载了多个脚本,而 Cheerio 只是在快速浏览,而不是等待整个页面完全加载,然后再提取它可以找到的任何数据,并且继续。

要爬取的总页数约为 2500,所以我不介意过程是否缓慢,但我想确保它是完整的。

如何确保页面在提取之前已完全加载?我认为该async功能会自动执行此操作。

0 投票
1 回答
1063 浏览

web-scraping - 如何链接两个 Apify 演员?

我需要使用 Apify 平台抓取通过 G​​oogle 搜索获得的 URL 列表。

我的计划是从 Google Search Scraper Actor 任务开始。但是我不认为它可以用来抓取除了谷歌搜索结果之外的任何东西(也许我错了?)。因此,我需要将其输出提供给另一个 Actor 任务,例如 Web Scraper 或 Puppeteer Scraper。

但我似乎找不到与演员链接相关的文档。我应该如何进行?

更新 :

我发现How to pass data from crawler to actor ,并且在第二个 actor 的Run task API 端点上设置一个ACTOR.RUN.SUCCEEDEDwebhook似乎有效(即第二个 actor 已启动)。

但是我似乎找不到如何将第一个参与者的数据集传递给第二个参与者:Start URLs字段是强制性的,我想我应该将其设置为数据集,但是每次运行的数据集链接都不同……</p>

0 投票
1 回答
643 浏览

apify - SyntaxError: await 仅在具有 Apify Metamorph 的异步函数中有效

我正在尝试通过一个非常简单的示例来了解 Apify 的Actor Metamorph :

但是运行失败并出现语法错误:

SyntaxError: await 仅在异步函数中有效

我如何通过 Metamorph将async性质传递pageFunction给?apify/web-scraper

0 投票
1 回答
637 浏览

javascript - Try/catch 处理程序的行为不一致

我在 Puppeteer 脚本中有以下错误处理程序。从node我的计算机上运行时,它运行良好。但是,当从 Apify Puppeteer-Scraper Actor 运行时,它只有在我取消注释时才有效console.log(e)。如果不是,则无论是否存在类元素,它都将始终设置notfound为。truefoobar

在其他语言中,我会怀疑内存处理不好,但我不确定这里是否会出现这种情况?什么可以解释这种行为?

0 投票
1 回答
821 浏览

javascript - 如何在 Apify web 中的 pageFunction 执行之间传递数据

我正在用 Apify 抓取网站。我想抓取不同类型的页面,然后将数据组合成一个数据集。现在我为每种页面(用户,镜头)提供了不同的数据集。如何在 pageFunction 执行之间传输数据,例如。计算每个镜头作者的追随者人数。

0 投票
1 回答
1266 浏览

javascript - 网页无限滚动时如何让Apify爬虫滚动整页?

我面临一个问题,我无法使用产品目录页面上的延迟加载将所有产品数据作为网站获取。这意味着它需要滚动直到加载整个页面。

我只获得首页产品数据。

0 投票
3 回答
867 浏览

javascript - 完成后再刮一次的最佳方法

我有以下情况:

  • 我的擦伤在登录后面,所以我总是需要先点击一个登录页面
  • 然后我有一个 30 个 url 的列表,可以异步抓取,我只关心
  • 然后在最后,当所有这 30 个 url 都被抓取后,我需要点击最后一个单独的 url,将 30 个 URL 抓取的结果放入 firebase 数据库并进行一些其他突变(如地址的地理查找等)

目前,我在请求队列中有所有 30 个 url(通过 Apify 网络界面),我正在尝试查看它们何时完成。

但显然它们都是异步运行的,因此数据永远不可靠

我需要将最后一个 URL 分开的原因有两个:

  1. 最明显的原因是,在将所有内容发送到数据库之前,我需要确保获得所有 30 次刮擦的结果
  2. 30 个 URL 中的任何一个都不允许我进行 Ajax / Fetch 调用,我需要将其发送到 Firebase 并进行地址的地理查找

编辑:根据@Lukáš Křivka 的回答对此进行了尝试。while 循环中的handledRequestCount 达到最大值2,从不达到4 ...并且Puppeteer 正常结束。我将“return”放在 while 循环中,否则请求永远不会完成(当然)。

在我当前的测试设置中,我有 4 个要抓取的 url(在 Puppeteer Scraper(在 Apify.com 上)的 Start URLS 输入字段中,并且此代码:

0 投票
1 回答
703 浏览

web-scraping - 使用 Apify,如何提取依赖于模态窗口输入的数据?

我有兴趣使用模式窗口抓取网站以选择位置。网站数据取决于在模式窗口中选择的位置。

如何显示模态窗口并选择我有兴趣抓取的位置?

我对Apify很熟悉,我打算使用interceptRequest()回调函数来显示模态窗口并选择它,但是我对如何做不是很熟悉。

编辑:为清楚起见添加图片 在此处输入图像描述

在此处输入图像描述