问题标签 [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.
web-crawler - 使用 Apify SDK 时有没有办法指定最大爬网深度?
我正在开发一个项目,我正在评估 Scrapy 和 Apify。大多数代码都围绕着 node.js,所以一个 javascript 解决方案会很好。另外,我喜欢我可以在 Apify 中使用 puppeteer 的事实。也就是说,我的用例需要对许多网站进行相当浅的(例如大约 4 次深度)爬网。这在 Scrapy 中很容易配置,但我不知道如何在 Apify 中进行配置。有没有办法在新的 Apify API 中指定最大深度?看起来这是他们旧版爬虫中的一个参数,但我在新 API 中没有找到它。
web-scraping - 如何抓取受封装保护的网站?
https://www.genecards.org/cgi-bin/carddisp.pl?gene=ZSCAN22
在上面的网页上,如果我点击See all 33
,我会看到在 Chrome DevTools 中发送了以下 GET 请求。
https://www.genecards.org/gene/api/data/Enhancers?geneSymbol=ZSCAN22
直接访问它被阻止。
我尝试使用木偶。我可以使用 puppeteer 单击“查看所有 33 个”,但随后我需要解析生成的 HTML 文件。最好直接从https://www.genecards.org/gene/api/data/Enhancers?geneSymbol=ZSCAN22
. 使用 puppeteer 单击“查看全部 33 个”后,我不确定如何获取它。
我不确定 apify 是否可以提供帮助。
谁能告诉我怎么刮?
apify - 未找到默认数据集,如果设置了 APIFY_DEFAULT_DATASET_ID
Apify 文档在此处输入链接描述解释说,可以通过设置环境变量 APIFY_DEFAULT_DATASET_ID 来命名默认数据集。如果我这样做,在创建 puppeteer-crawler 之前使用代码示例 1(见下文),如果我抓取页面并使用代码示例 2 存储结果,我会得到一个Dataset-not-found-exception。
我的代码有什么问题?干杯 Wulfgäääng
// 代码示例 1:设置默认数据集 id
const crawler = new Apify.PuppeteerCrawler({ ...
// 代码示例 2:存储结果
javascript - 页面上的不同内容 Apify Webcrawling
我有一个关于使用 Apify 抓取网站的问题。我想从网页中获取以下信息:“位置、区域、网站和电子邮件。现在使用我的代码可以获得几页的正确数据,问题是每个页面上的信息顺序不一样.例如电话号码是一页上的第一个,另一页上的第三个。有没有办法在代码的“dt”部分查找文本,所以我在右栏中得到正确的数据? 或者是否有其他选项可以解决此问题?
这是我现在的代码: const $ = jQuery
这是 HTML 代码:
感谢您的帮助
apify - 有没有办法使用 Apify.main() 而不会在完成时退出 node.js 进程?
我在我的应用程序中使用 Apify SDK,并使用 Apify.main() 函数编写了许多爬虫。main() 的最后一个动作是退出节点进程,但这不符合我的目的。有没有办法克服这种行为?
apify - 关于代理轮换的问题
我已经使用 PuppeteerCrawler 开发了一个爬虫行为,目前最小。和最大。并发1,我有几个问题:
- 代理轮换是默认激活还是我必须激活它以及如何激活?
- 如果代理轮换处于活动状态,我如何才能看到它工作,例如我在哪里可以获得使用的 IP?
- 何时触发代理轮换,是否创建了新的爬虫,或者是否打开了新选项卡?
最好的毕业生,Wulfgääng
node.js - puppeteer / 登录后不接受任何操作
我尝试登录并在使用 puppeteer/node js 登录后执行另一个操作,它接受登录,在登录帐户后它从未执行任何操作
这是我的代码
- 如果有人可以查看代码并知道问题以帮助我修复它注意:我有同样的注册问题,它成功注册并且在访问该站点后它从不执行任何操作
apify - injectFile 方法的survivalNavigations 选项的问题
我开发了一个 PuppeteerCrawler 行为并想注入一些通用代码,用于所有页面。我找到了 Apify.utils.puppeteer.injectFile 方法,如果代码是由每个 'domcontentloaded' 事件注入的,该方法工作正常。但我只想注入一次。为此,有一个“surviveNavigations”选项,它应该会导致每个页面的重新注入。
不幸的是,这个选项对我不起作用。请在下面找到一些测试代码,它演示了我的问题。对于第一页,找不到“testfunction.js”,第二页没有。
我的代码有什么问题?
干杯沃尔夫冈
这是测试爬虫,它应该打开两个页面,注入 testfunction.js 的 ONCE 并执行它:
});
这是要注入的“testfunction.js”:
};
apify - 关于 injectFile 的基本问题
我有一些关于 injectFile 的基本问题:
- 您何时建议使用 injectFile(code) 而不是 page.evaluate(code, ...) 将代码放入要抓取的页面中?
- 使用 injectFile(code) 有什么区别/优点/缺点,例如在性能、抗刮擦可检测性等方面?
- 应该如何像我一样通过替换 gotoFunction 和实现 page.on('domcontentloaded', ...) 事件来实现 injectFile(code) ?或者,还有更好的方法?
- 如果不是我上一篇文章中描述的,选项“surviveNavigations”的用例是什么?它是干什么用的?
最好的问候,沃尔夫冈
apify - puppeteer crawler - 通过单击“下一步”按钮进行分页
我的 Puppeteer 爬虫遇到以下问题:我正在抓取的网站有结果页面,我们可以通过单击底部页面的箭头导航到下一页(链接没有简单的 href,所以我们需要模拟点击按钮)。在每一页上,我需要抓取所有项目的详细信息(房地产卡/30 页卡)。
问题是:如何导航到所有后续页面,并刮掉每个页面上的所有卡片?
我所做的:在开始网址上,我填写了一个表单以提交并获得我请求的前 30 个结果。然后,我在与页面底部的箭头匹配的选择器上循环并单击它,直到选择器不存在。导航有效,但刮板无法获取每页上卡片的所有链接。所以只有前30张牌被刮掉,然后刮板停止。
“START”标签与表单的起始 URL 相匹配。
“详细信息”标签与结果页面上与一张卡片相关的链接相匹配。
关于如何处理这种情况的任何想法?