Javascript Apify web服务忽略URL片段
我有一个我想抓取的URL列表,所以我把它放在Javascript Apify web服务忽略URL片段,javascript,apify,Javascript,Apify,我有一个我想抓取的URL列表,所以我把它放在startUrls中,如下所示 "startUrls": [ { "url": "https://www.example.com/sample#000000", "method": "GET" }, { "url": "https://www.example.com/sample#111111", "method": "GET" } ] 这是我的pageFunctio
startUrls
中,如下所示
"startUrls": [
{
"url": "https://www.example.com/sample#000000",
"method": "GET"
},
{
"url": "https://www.example.com/sample#111111",
"method": "GET"
}
]
这是我的pageFunction
code的摘录
async function pageFunction(context) {
const { request } = context;
var name;
try {
name = document.querySelector('h1').textContent;
} catch (e) {
name = "null";
}
return {
link: request.url,
name
};
}
它可以很好地处理可以通过域或路径区分的URL。但是,如果唯一的区别是在片段中,则只处理第一个URL,因为第二个URL被认为是重复的,因此被跳过
我已经尝试在pageFunction
await context.enqueueRequest({
url: context.request.url,
keepUrlFragment: true,
});
但这会导致另一个问题,即它会为每个URL生成重复的结果
那么我应该怎么做才能使它正确工作呢?除了调用
enqueueRequest
将keepUrlFragment
设置为true
,还有其他方法吗 不幸的是,您现在无法直接在startUrls中设置keepUrlFragment
。因此,我建议根本不使用它们。您可以在customData
中将它们作为数组传递。然后您可以将这样的页面函数与类似http://example.com
和标签开始
async function pageFunction(context) {
const { request, customData } = context;
if (request.userData.label === 'START') {
for (const url of customData) {
await context.enqueueRequest({
url,
keepUrlFragment: true,
});
}
} else {
// Your main scraping logic here
}
}