Есть ли способ указать максимальную глубину сканирования при использовании Apify SDK? - PullRequest
0 голосов
/ 16 октября 2019

Я работаю над проектом, для которого я оцениваю Scrapy и Apify. Большая часть кода сосредоточена вокруг node.js, поэтому было бы неплохо использовать javascript. Кроме того, мне нравится тот факт, что я могу использовать кукловод в Apify. Тем не менее, мой вариант использования требует выполнения довольно мелкого (например, глубины примерно 4) сканирования многих веб-сайтов. Это легко настроить в Scrapy, но я не могу понять, как это сделать в Apify. Есть ли способ указать максимальную глубину в новом API Apify? Похоже, что это был параметр в их устаревшем сканере, но я не нашел его в новом API.

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Есть два подхода, которые вы можете использовать. Во-первых, вы можете использовать публичный актер Puppeteer Scraper , который позволяет вам использовать большинство функций Apify SDK в упрощенной форме, а конфигурация максимальная глубина сканирования доступна в качестве простого ввода. в разделе Производительность и ограничения . Чтобы узнать основы, посетите вводное руководство .

Второй подход более сложный и использует Apify SDK напрямую. Со всеми вашими запросами вы можете передавать произвольные пользовательские данные, используя свойство request.userData. Таким образом, прежде чем добавлять дополнительные страницы в очередь сканирования, вы можете проверить, не достигли ли вы необходимой глубины:

const MAX_DEPTH = 4;

// When creating the request queue, we seed the first request with a depth of 0.
const requestQueue = await Apify.openRequestQueue();
await requestQueue.addRequest({
 url: "https://stackoverflow.com",
 userData: {
   depth: 0,
 }
});

// ...

// Then, somewhere in handlePageFunction, when adding more requests to the queue.
if (request.userData.depth < MAX_DEPTH) {
  await requestQueue.addRequest({
    url: "https://example.com",
    userData: {
      depth: request.userData.depth + 1,
  }
});

}

0 голосов
/ 21 октября 2019

Параметры «Максимальная глубина сканирования» можно найти в apify / web-scraper . Этот инструмент является заменой устаревшего скребка PhantomJS. Он использует puppeteer и имеет очень похожий интерфейс.

Вы даже можете использовать Apify SDK и реализовать максимальную глубину самостоятельно, используя PuppeteerCrawler. Я рекомендую использовать request.userData для регистрации того, насколько глубоко вы сканируете. Если вас заинтересовало это решение, вы можете проверить исходный код веб-скребка , как это делается в веб-скребке.

...