Оглавление
X-crawl
X-crawl - это гибкая многофункциональная библиотека Node.js для краулеров. Используется для переползания страниц, переползания интерфейсов, переползания файлов и опроса переползающих страниц.
Если вам также нравится x-crawl, вы можете дать репозиторию x-crawl звезду, чтобы поддержать его, спасибо за вашу поддержку!
Особенности
🔥 AsyncSync - Просто измените значение атрибута mode, чтобы переключить режим асинхронного или синхронного ползания.
⚙️Multiple функций — Он может ползать по страницам, ползать по интерфейсам, ползать по файлам и опрашивать ползание, а также поддерживает одиночное или множественное ползание.
🖋️ Гибкий стиль написания — Простая конфигурация цели, подробная конфигурация цели, смешанная конфигурация массива целей и расширенная конфигурация, один и тот же API ползания может адаптироваться к нескольким конфигурациям.
👀Device Fingerprinting - нулевая конфигурация или пользовательская конфигурация, чтобы избежать отпечатков пальцев для идентификации и отслеживания нас из разных мест.
⏱️ Interval Crawling - отсутствие интервала, фиксированный интервал и случайный интервал могут генерировать или избежать высокой одновременности ползания.
🔄 Повторная попытка при неудаче - глобальные настройки, локальные настройки и индивидуальные настройки, это позволяет избежать неудач при ползании, вызванных временными проблемами.
🚀 Очередь приоритетов - В соответствии с приоритетом одной цели ползания, она может быть пройдена раньше других целей.
☁️ Crawl SPA - Crawl SPA (Single Page Application) для создания предварительно отрендеренного контента (он же “SSR” (Server Side Rendering)).
⚒️ Controlling Pages - Безголовые браузеры могут отправлять формы, нажатия клавиш, действия по событиям, генерировать скриншоты страниц и т.д.
🧾 Захват записей - Захват и запись результатов ползания и другой информации, а также выделение напоминаний на консоли.
🦾 TypeScript - Собственные типы, реализация полных типов через дженерики.
Пример
В качестве примера возьмем несколько фотографий из опыта Airbnb hawaii и Plus listings автоматически каждый день:
// 1.Import module ES/CJS
import xCrawl from 'x-crawl'
// 2.Create a crawler instance
const myXCrawl = xCrawl({ maxRetry: 3, intervalTime: { max: 3000, min: 2000 } })
// 3.Set the crawling task
/*
Call the startPolling API to start the polling function,
and the callback function will be called every other day
*/
myXCrawl.startPolling({ d: 1 }, async (count, stopPolling) => {
// Call crawlPage API to crawl Page
const res = await myXCrawl.crawlPage([
'https://zh.airbnb.com/s/hawaii/experiences',
'https://zh.airbnb.com/s/hawaii/plus_homes'
])
// Store the image URL to targets
const targets = []
const elSelectorMap = ['.c14whb16', '.a1stauiv']
for (const item of res) {
const { id } = item
const { page } = item.data
// Gets the URL of the page's wheel image element
const boxHandle = await page.$(elSelectorMap[id - 1])
const urls = await boxHandle!.$eval('picture img', (imgEls) => {
return imgEls.map((item) => item.src)
})
targets.push(...urls)
// Close page
page.close()
}
// Call the crawlFile API to crawl pictures
myXCrawl.crawlFile({ targets, storeDir: './upload' })
})
Результат работы:


Примечание: Не ползайте по своему усмотрению, вы можете проверить протокол robots.txt перед ползанием. Это просто демонстрация того, как использовать x-crawl.