我有一个要抓取的网址列表,因此我将其放入startUrls
中
"startUrls": [
{
"url": "https://www.example.com/sample#000000",
"method": "GET"
},
{
"url": "https://www.example.com/sample#111111",
"method": "GET"
}
]
这是我的pageFunction
代码的摘录。
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
之外,还有其他方法吗?
答案 0 :(得分:1)
很遗憾,现在您不能直接在startUrls中设置keepUrlFragment
。因此,我建议完全不使用它们。您可以改为将它们作为数组传递到customData
中。然后,您可以将这样的页面功能与http://example.com
之类的虚拟startUrl和标签START
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
}
}