У меня есть актер с чирио-сканером, который просматривает список из примерно 5500 URL-адресов (urlList)
URL-адреса - это страницы результатов, на которых есть скрипт, содержащий файл json. В json добавлен текст, поэтому он не «чистый», поэтому я извлекаю его в константе и проверяю, есть ли совпадение в операторе «if». Если есть совпадение, я ползу.
Теперь. Моя проблема в том, что статистика поискового робота + журналы, кажется, указывают на то, что все URL-адреса просканированы. Проблема в том, что это не так. В журналах я вижу некоторые тайм-ауты (пример ниже), но эти URL-адреса просто возвращаются в список запросов. Такой URL-адрес, как "example.com", выглядит нормально в журналах, и при поиске на странице есть данные + json, но он не выводится в результатах.
Я не могу понять, что не так, но подозреваю, что это утверждение «если» делает что-то странное. Может быть, json найден, но еще не загружен, или что-то еще.
Могли бы некоторые из вас, умные, протянуть руку помощи?
Пример статистики Статистика последнего запроса сканера: {"avgDurationMillis": 2554, "perMinute": 580, "finished": 5445, "failed": 0, "retryHistogram": [5151,276,18] }
Пример тайм-аута: Ошибка: CheerioCrawler: время ожидания запроса истекло через 30 секунд. и т. д. и т. д.
const Apify = require('apify');
Apify.main(async () => {
const requestList = new Apify.RequestList({ sources: urlList })
await requestList.initialize();
const crawler = new Apify.CheerioCrawler({
requestList,
useApifyProxy: true,
handlePageFunction: async ({ $, request }) => {
const jsonString = $('script:contains("__thisvalue__")').text();
if (jsonString.match(/\[{[\d\D]*}\]/) !== null) {
const json = JSON.parse(jsonString.match(/\[{[\d\D]*}\]/));
let i = 0;
for (i = 0; i < json.length; i++) {
await Apify.pushData({
//do some crawling
url: request.url
});
}
}
},
handleFailedRequestFunction: async ({ request }) => {
console.log(`Copy of request: ${request}`);
},
});
await crawler.run();
return 'Done'
});