Deci, ce este web scraping oricum? Aceasta implică automatizarea sarcinii laborioase de colectare a informațiilor de pe site-uri web.

Există o mulțime de cazuri de utilizare pentru răzuirea web: este posibil să doriți să colectați prețuri de la diverse site-uri de comerț electronic pentru un site de comparare a prețurilor. Sau poate aveți nevoie de orele de zbor și de listările hotelurilor / AirBNB pentru un site de călătorie. Poate doriți să colectați e-mailuri din diverse directoare pentru clienții potențiali de vânzare sau să utilizați date de pe internet pentru a instrui modele de învățare automată / AI. Sau chiar ai putea dori să construiești un motor de căutare precum Google!

Noțiuni introductive despre răzuirea web este ușor și procesul poate fi împărțit în două părți principale:

  • achiziționarea datelor folosind o bibliotecă de solicitări HTML sau un browser fără cap,
  • și analizarea datelor pentru a obține informațiile exacte pe care le doriți.

Acest ghid vă va ajuta să parcurgeți procesul cu popularul Node.js cerere-promisiune modul, CheerioJS, și Păpușar. Examinând exemplele din acest ghid, veți afla toate sfaturile și trucurile de care aveți nevoie pentru a deveni profesionist la colectarea oricăror date de care aveți nevoie cu Node.js!

Vom aduna o listă cu toate numele și zilele de naștere ale președinților SUA de pe Wikipedia și titlurile tuturor postărilor de pe prima pagină a Reddit.

Primele lucruri mai întâi: Să instalăm bibliotecile pe care le vom folosi în acest ghid (Puppeteer va dura ceva timp să se instaleze, deoarece trebuie să descarce și Chromium).

Faceți prima dvs. solicitare


Apoi, să deschidem un nou fișier text (denumiți fișierul potusScraper.js) și să scriem o funcție rapidă pentru a obține codul HTML al paginii Wikipedia „Lista președinților”.

Ieșire:

Folosind Chrome DevTools

Super, am primit codul HTML brut de pe pagina web! Dar acum trebuie să dăm sens acestei pete uriașe de text. Pentru a face acest lucru, va trebui să folosim Chrome DevTools pentru a ne permite să căutăm cu ușurință prin HTML-ul unei pagini web.

Utilizarea Chrome DevTools este ușoară: pur și simplu deschideți Google Chrome și faceți clic dreapta pe elementul pe care doriți să-l răscoliți (în acest caz fac clic dreapta pe George Washington, pentru că dorim să obținem link-uri către toate paginile Wikipedia ale președinților individuali) :

Ultimul ghid pentru Web Scraping cu Nodejs

Acum, pur și simplu faceți clic pe inspectare, iar Chrome va afișa panoul DevTools, permițându-vă să inspectați cu ușurință sursa HTML a paginii.

1611882906 482 Ultimul ghid pentru Web Scraping cu Nodejs

Analizarea HTML cu Cheerio.js

Minunat, Chrome DevTools ne arată acum modelul exact pe care ar trebui să-l căutăm în cod (o etichetă „mare” cu un hyperlink în interior). Să folosim Cheerio.js pentru a analiza codul HTML pe care l-am primit anterior pentru a returna o listă de link-uri către paginile individuale Wikipedia ale președinților SUA.

Ieșire:

Verificăm să ne asigurăm că sunt returnate exact 45 de elemente (numărul președinților SUA), ceea ce înseamnă că nu există alte etichete „mari” ascunse în altă parte pe pagină. Acum, putem parcurge și obține o listă de linkuri către toate cele 45 de pagini prezidențiale Wikipedia obținându-le din secțiunea „atribute” a fiecărui element.

Ieșire:

Acum avem o listă cu toate cele 45 de pagini prezidențiale Wikipedia. Să creăm un fișier nou (numit potusParse.js), care va conține o funcție pentru a lua o pagină prezidențială Wikipedia și a returna numele și ziua de naștere a președintelui. În primul rând, să primim codul HTML brut de pe pagina Wikipedia a lui George Washington.

Ieșire:

Să folosim încă o dată Chrome DevTools pentru a găsi sintaxa codului pe care dorim să-l analizăm, astfel încât să putem extrage numele și ziua de naștere cu Cheerio.js.

1611882906 648 Ultimul ghid pentru Web Scraping cu Nodejs
1611882907 650 Ultimul ghid pentru Web Scraping cu Nodejs

Deci, vedem că numele se află într-o clasă numită „firstHeading” și ziua de naștere se află într-o clasă numită „bday”. Să modificăm codul nostru pentru a utiliza Cheerio.js pentru a extrage aceste două clase.

Ieșire:

Punând totul împreună

Perfect! Acum să încheiem acest lucru într-o funcție și să-l exportăm din acest modul.

Acum să revenim la fișierul nostru original potusScraper.js și să solicităm modulul potusParse.js. O vom aplica apoi pe lista de wikiUrls pe care le-am adunat mai devreme.

Ieșire:

Redarea paginilor JavaScript

Voilà! O listă cu numele și zilele de naștere ale tuturor celor 45 de președinți americani. Folosind doar modulul de cerere-promisiune și Cheerio.js ar trebui să vă permiteți să răscoliți marea majoritate a site-urilor de pe internet.

Recent, însă, multe site-uri au început să utilizeze JavaScript pentru a genera conținut dinamic pe site-urile lor web. Acest lucru cauzează o problemă pentru promisiuni de solicitare și alte biblioteci de cereri HTTP similare (cum ar fi axios și fetch), deoarece primesc răspunsul numai din cererea inițială, dar nu pot executa JavaScript așa cum poate un browser web.

Astfel, pentru a răzuie site-urile care necesită executarea JavaScript, avem nevoie de o altă soluție. În următorul nostru exemplu, vom obține titlurile pentru toate postările de pe prima pagină a Reddit. Să vedem ce se întâmplă atunci când încercăm să folosim request-promise așa cum am făcut în exemplul anterior.

Ieșire:

Iată cum arată ieșirea:

1611882907 979 Ultimul ghid pentru Web Scraping cu Nodejs

Hmmm … nu chiar ceea ce ne dorim. Asta pentru că obținerea conținutului real necesită executarea JavaScript-ului pe pagină! Cu Puppeteer, nu este o problemă.

Puppeteer este un nou modul extrem de popular, adus de echipa Google Chrome, care vă permite să controlați un browser fără cap. Acest lucru este perfect pentru răzuirea programată a paginilor care necesită executarea JavaScript. Să obținem codul HTML din prima pagină a Reddit folosind Puppeteer în loc de promisiune-cerere.

Ieșire:

Grozav! Pagina este umplută cu conținutul corect!

1611882907 183 Ultimul ghid pentru Web Scraping cu Nodejs

Acum putem folosi Chrome DevTools așa cum am făcut în exemplul anterior.

1611882907 638 Ultimul ghid pentru Web Scraping cu Nodejs

Se pare că Reddit introduce titlurile în etichetele „h2”. Să folosim Cheerio.js pentru a extrage etichetele h2 din pagină.

Ieșire:

Resurse aditionale

Și iată lista! În acest moment, ar trebui să vă simțiți confortabil scriind primul dvs. scraper web pentru a aduna date de pe orice site web. Iată câteva resurse suplimentare pe care le-ați putea găsi utile în timpul călătoriei dvs. de răzuire web: