javascript - 如何在 Apify web 中的 pageFunction 执行之间传递数据
问题描述
我正在用 Apify 抓取网站。我想抓取不同类型的页面,然后将数据组合成一个数据集。现在我为每种页面(用户,镜头)提供了不同的数据集。如何在 pageFunction 执行之间传输数据,例如。计算每个镜头作者的追随者人数。
async function pageFunction(context) {
const { request, log, jQuery } = context;
const $ = jQuery;
if (request.url.indexOf('/shots/') > 0) {
const title = $('.shot-title').text();
return {
url: request.url,
title
};
} else if (request.userData.label === "USER") {
var followers_count = $('.followers .count').first().text();
return {
url: request.url,
followers_count
};
}
}
解决方案
如果我对问题的理解正确,您可以通过爬取的页面传递数据,最后只保存一项。对于这个用例,您可以使用userData
,您可以在每个请求中传递它。
例如,如果您想将数据从/shots
站点传递到USER
,您可以这样做。(但它需要您手动将页面排入队列以控制数据的流动,除了页面的 /shots 类型是您访问的第一个然后继续之外,这种方法也是如此)
async function pageFunction(context) {
const { request, log, jQuery } = context;
const $ = jQuery;
if (request.url.indexOf('/shots/') > 0) {
const title = $('.shot-title').text();
const userLink = 'some valid url to user page'
//add to the queue your request with the title in the userData
await context.enqueueRequest({
url: userLink,
userData:{
label:'USER',
shotsTitle: title
}
})
} else if (request.userData.label === "USER") {
var followers_count = $('.followers .count').first().text();
//here you need to get the shotsTitle and return it
return {
url: request.url,
followers_count,
shotsTitle: request.userData.shotsTitle
};
}
}
如果你需要分享演员之间的运行,那是另一个话题,让我知道它是否有帮助。
还建议您阅读此处的入门指南。
推荐阅读
- node.js - nodejs中signedcookies和unsignedcookies之间的确切区别是什么?
- python - 如何使用 RobotFramework 通过 Python shell 运行 Python 脚本?
- react-apollo - apolloClient.query 不使用中间件,而
做 - python - Django 得到错误:id() 只接受一个参数(给定 0),用外键保存
- sql - SQL Server 触发器更新另一个表的列
- javascript - 如何在 php 上捕获使用 ajax 发送的 json 数据(无 jquery)
- javascript - 在没有“ERR_BLOCKED_BY_CLIENT”的情况下,如何在 onHeadersReceived 后阻止 chrome webextension 中的 webrequest
- c++ - 使用函数从文件输出
- javascript - 如何在 mysqli 和 php 中保存 bootstrap 2 或 3 nav tabs 内容?
- matplotlib - cifar10 数据集“超出最大允许大小”错误