Dokonalý sprievodca pre scraping z webu pomocou Node.js

Čo je vlastne web scraping? Zahŕňa to automatizáciu náročnej úlohy zhromažďovania informácií z webových stránok.

Existuje veľa prípadov použitia na zoškrabanie webu: možno budete chcieť zhromaždiť ceny z rôznych webov elektronického obchodu pre stránky na porovnávanie cien. Alebo možno potrebujete letové časy a zoznamy hotelov / AirBNB pre stránky o cestovaní. Možno chcete zbierať e-maily z rôznych adresárov pre potenciálnych zákazníkov alebo použiť údaje z internetu na školenie modelov strojového učenia / AI. Alebo môžete dokonca chcieť vytvoriť vyhľadávací nástroj ako Google!

Začíname so scrapingom na webe je ľahké a proces je možné rozdeliť na dve hlavné časti:

  • získavanie údajov pomocou knižnice požiadaviek HTML alebo bezhlavého prehliadača,
  • a analýzou údajov získate presné informácie, ktoré požadujete.

Táto príručka vás prevedie procesom s populárnym modulom požiadaviek a prísľubov Node.js, CheerioJS a Puppeteer. V príkladoch v tejto príručke sa dozviete všetky tipy a triky, ktoré potrebujete, aby ste sa stali profesionálom v zhromažďovaní potrebných údajov pomocou súboru Node.js!

Zhromaždíme zoznam všetkých mien a narodenín amerických prezidentov z Wikipédie a názvy všetkých príspevkov na titulnej stránke Redditu.

Prvá vec prvá: Nainštalujme si knižnice, ktoré budeme používať v tejto príručke (inštalácii programu Puppeteer bude chvíľu trvať, pretože bude potrebné stiahnuť aj Chromium).

Vaša prvá požiadavka

Ďalej otvoríme nový textový súbor (pomenujeme ho potusScraper.js) a napíšeme rýchlu funkciu, ktorá umožní získať HTML stránky Wikipedia „List of Presidents“.

Výkon:

Používanie nástrojov Chrome DevTools

Super, máme surový HTML z webovej stránky! Teraz však musíme dať zmysel tejto obrovskej kvapke textu. Aby sme to dosiahli, budeme musieť použiť Chrome DevTools, ktorý nám umožní jednoduché vyhľadávanie cez HTML webovej stránky.

Používanie nástrojov Chrome DevTools je jednoduché: jednoducho otvorte prehliadač Google Chrome a kliknite pravým tlačidlom myši na prvok, ktorý chcete zoškrabať (v takom prípade klikám pravým tlačidlom myši na Georgea Washingtona, pretože chceme získať odkazy na všetky stránky Wikipedia jednotlivých prezidentov). :

Teraz stačí kliknúť na inšpekciu a Chrome otvorí podokno DevTools, ktoré vám umožní ľahkú kontrolu zdrojového kódu HTML stránky.

Analýza kódu HTML pomocou súboru Cheerio.js

Úžasné, Chrome DevTools nám teraz ukazuje presný vzor, ​​ktorý by sme mali v kóde hľadať („veľká“ značka s hypertextovým odkazom). Použime súbor Cheerio.js na analýzu kódu HTML, ktorý sme dostali skôr, aby sme vrátili zoznam odkazov na jednotlivé stránky prezidentov USA na Wikipédii.

Výkon:

Skontrolujeme, či je vrátených presne 45 prvkov (počet amerických prezidentov), ​​čo znamená, že inde na stránke nie sú žiadne ďalšie skryté „veľké“ značky. Teraz môžeme prejsť a získať zoznam odkazov na všetkých 45 prezidentských stránok Wikipédie tak, že ich získame z časti „atribútov“ každého prvku.

Výkon:

Teraz máme zoznam všetkých 45 prezidentských stránok Wikipedia. Vytvorme nový súbor (s názvom potusParse.js), ktorý bude obsahovať funkciu prevziať prezidentskú stránku Wikipedia a vrátiť meno a dátum narodenia prezidenta. Najdôležitejšie je najskôr, poďme si zaobstarať surové HTML zo stránky Wikipedia Georga Washingtona.

Výkon:

Znovu použijeme Chrome DevTools na nájdenie syntaxe kódu, ktorý chceme analyzovať, aby sme pomocou Cheerio.js mohli extrahovať meno a dátum narodenia.

Vidíme teda, že meno je v triede s názvom „firstHeading“ a narodeniny v triede s názvom „bday“. Upravme náš kód tak, aby používal súbory Cheerio.js na extrahovanie týchto dvoch tried.

Výkon:

Dávať to všetko dokopy

Perfektné! Teraz to zhrňme do funkcie a exportujme to z tohto modulu.

Teraz sa vráťme k nášmu pôvodnému súboru potusScraper.js a vyžiadajme si modul potusParse.js. Potom ho použijeme na zoznam wikiUrls, ktorý sme zhromaždili skôr.

Výkon:

Vykresľovanie stránok JavaScriptu

Voilà! Zoznam mien a narodenín všetkých 45 amerických prezidentov. Iba s použitím modulu request-prísľub a súboru Cheerio.js by ste mali umožniť scraping drvivej väčšiny webov na internete.

V poslednej dobe však veľa webov začalo používať JavaScript na generovanie dynamického obsahu na svojich webstránkach. To spôsobuje problém požiadavkám a sľubom a iným podobným knižniciam požiadaviek HTTP (napríklad axios a fetch), pretože dostávajú odpoveď iba od pôvodnej žiadosti, ale nemôžu spustiť JavaScript tak, ako to dokáže webový prehľadávač.

Aby sme teda mohli vyškriabať stránky, ktoré vyžadujú spustenie JavaScriptu, potrebujeme ďalšie riešenie. V našom ďalšom príklade získame názvy všetkých príspevkov na titulnej stránke Redditu. Pozrime sa, čo sa stane, keď sa pokúsime použiť požiadavku-prísľub, ako sme to urobili v predchádzajúcom príklade.

Výkon:

Takto vyzerá výstup:

Hmmm ... nie celkom to, čo chceme. Je to preto, lebo získanie skutočného obsahu vyžaduje, aby ste na stránke spustili JavaScript. S Puppeteer to nie je žiadny problém.

Puppeteer je mimoriadne populárny nový modul, ktorý vám priniesol tím Google Chrome a ktorý umožňuje ovládať bezhlavý prehliadač. To je ideálne na programové vyradenie stránok, ktoré vyžadujú spustenie JavaScriptu. Poďme získať HTML z titulnej stránky Redditu pomocou Puppeteer namiesto request-sľub.

Výkon:

Pekný! Stránka je naplnená správnym obsahom!

Teraz môžeme používať Chrome DevTools, ako sme to robili v predchádzajúcom príklade.

Vyzerá to, že Reddit umiestňuje tituly do značiek „h2“. Použime súbor Cheerio.js na extrahovanie značiek h2 zo stránky.

Výkon:

Dodatočné zdroje

A je tu zoznam! V tomto okamihu by ste sa mali cítiť pohodlne pri písaní svojej prvej webovej škrabky na zhromažďovanie údajov z ľubovoľných webových stránok. Tu je niekoľko ďalších zdrojov, ktoré by vám mohli pomôcť počas procesu scrapovania webu:

  • Zoznam služieb proxy pre scraping na webe
  • Zoznam užitočných nástrojov na zoškrabávanie webu
  • Zoznam tipov na škrabanie webu
  • Porovnanie serverov proxy na scraping
  • Dokumentácia Cheerio
  • Dokumentácia kukláča