Szóval mi is a webes kaparás? Ez magában foglalja a weboldalakról történő információgyűjtés fáradságos feladatának automatizálását.
Nagyon sok felhasználási eset létezik a webes kaparáshoz: érdemes összegyűjteni az árakat a különböző e-kereskedelmi webhelyekről egy ár-összehasonlító webhely számára. Vagy talán szüksége van egy utazási oldal repülési idejére és szállodai / AirBNB listájára. Lehet, hogy e-maileket szeretne gyűjteni a különféle címtárakból az értékesítési vezetők számára, vagy az internetről származó adatokat használja a gépi tanulás / mesterséges intelligencia modellek képzéséhez. Vagy akár egy olyan keresőmotort is fel akarna építeni, mint a Google!
Az internetes kaparás megkezdése egyszerű, és a folyamat két fő részre bontható:
- az adatok megszerzése HTML kérés könyvtár vagy fej nélküli böngésző segítségével,
- és az adatok elemzése a kívánt információ megszerzéséhez.
Ez az útmutató végigvezeti Önt a népszerű Node.js kérés-ígéret modullal, a CheerioJS-szel és a Puppeteer-lel. Az ebben az útmutatóban szereplő példák segítségével megismerheti az összes olyan tippet és trükköt, amelyre szüksége van ahhoz, hogy profivá váljon a Node.js használatával szükséges adatok összegyűjtésében!
Összegyűjtjük az Egyesült Államok elnökeinek összes nevét és születésnapját a Wikipédiából, valamint az összes bejegyzés címét a Reddit címlapján.
Először is: Telepítsük az ebben az útmutatóban használt könyvtárakat (a Puppeteer telepítése eltart egy ideig, mivel a Chromium letöltéséhez is szüksége van).
Az első kérés benyújtása
Ezután nyissunk meg egy új szöveges fájlt (nevezzük meg a potusScraper.js fájlt), és írjunk egy gyors függvényt a Wikipédia „Elnökök listája” oldal HTML-jének megszerzéséhez.
Kimenet:
A Chrome DevTools használata
Remek, a nyers HTML-t a weblapról kaptuk! De most értelmet kell adnunk ennek a hatalmas szövegfoltnak. Ehhez a Chrome DevTools alkalmazást kell használnunk, hogy lehetővé tegyük számunkra a könnyű keresést egy weboldal HTML-jén keresztül.
A Chrome DevTools használata egyszerű: egyszerűen nyissa meg a Google Chrome-ot, és kattintson a jobb egérgombbal arra az elemre, amelyet be szeretne kaparni (ebben az esetben jobb gombbal kattintok George Washingtonra, mert linkeket akarunk kapni az egyes elnökök Wikipedia összes oldalára) :

Most egyszerűen kattintson az Ellenőrzés gombra, és a Chrome megjeleníti a DevTools ablaktáblát, amely lehetővé teszi az oldal HTML-kódjának egyszerű ellenőrzését.

HTML elemzése a Cheerio.js segítségével
Félelmetes, a Chrome DevTools most megmutatja a pontos mintát, amelyet a kódban keresnünk kell (egy „nagy” címke, benne hiperhivatkozással). A Cheerio.js segítségével elemezzük a korábban kapott HTML-t, hogy visszaküldjük az amerikai elnökök egyes Wikipédia-oldalaira mutató hivatkozások listáját.
Kimenet:
Ellenőrizzük, hogy pontosan 45 elem van-e visszaadva (az amerikai elnökök száma), vagyis az oldalon máshol nincsenek rejtett „nagy” címkék. Most áttekinthetjük a Wikipédia mind a 45 elnöki oldalának linkjeit, ha az egyes elemek „attribútumok” részéből beszerezzük őket.
Kimenet:
Most van egy listánk a 45 elnöki Wikipédia oldalról. Hozzunk létre egy új fájlt (potusParse.js néven), amely tartalmaz egy olyan funkciót, amely elviszi az elnöki Wikipédia oldalt, és visszaadja az elnök nevét és születésnapját. Először is, nyerjük meg a nyers HTML-t George Washington Wikipedia oldalán.
Kimenet:
Ismét használjuk a Chrome DevTools alkalmazást az elemezni kívánt kód szintaxisának megtalálásához, hogy a nevet és a születésnapot kibontsuk a Cheerio.js fájl segítségével.


Tehát azt látjuk, hogy a név a „firstHeading”, a születésnap pedig a „bday” nevű osztályba tartozik. Módosítsuk kódunkat, hogy a Cheerio.js használatával nyerjük ki ezt a két osztályt.
Kimenet:
Összedobva az egészet
Tökéletes! Most csomagoljuk be ezt egy függvénybe, és exportáljuk ebből a modulból.
Térjünk vissza az eredeti potusScraper.js fájlunkhoz, és igényeljük a potusParse.js modult. Ezután alkalmazzuk a korábban összegyűjtött wikiUrls listára.
Kimenet:
JavaScript oldalak renderelése
Voálá! A mind a 45 amerikai elnök nevének és születésnapjának listája. Csak a kérés-ígéret modult és a Cheerio.js-t használva lehetővé kell tennie, hogy az internetes oldalak túlnyomó részét lekaparja.
A közelmúltban azonban sok webhely elkezdett JavaScriptet használni dinamikus tartalom létrehozására a webhelyein. Ez problémát okoz a request-ígéret és más hasonló HTTP kérés-könyvtárak (például axios és fetch) esetében, mert csak a kezdeti kérésből kapják meg a választ, de nem tudják úgy végrehajtani a JavaScript-et, mint egy webböngésző.
Így a JavaScript futtatását igénylő webhelyek másolásához más megoldásra van szükségünk. Következő példánkban megkapjuk a Reddit címlapjának összes bejegyzésének címét. Lássuk, mi történik, amikor megpróbáljuk használni a kérés-ígéret módot, ahogy az előző példában is tettük.
Kimenet:
Így néz ki a kimenet:

Hmmm ... nem egészen azt akarjuk. Ez azért van, mert a tényleges tartalom megszerzéséhez a JavaScript futtatása szükséges az oldalon! Puppeteerrel ez nem probléma.
A Puppeteer egy rendkívül népszerű új modul, amelyet a Google Chrome csapata hozott Önnek, és amely lehetővé teszi a fej nélküli böngésző vezérlését. Ez tökéletes a JavaScript futtatását igénylő oldalak programozott másolásához. Töltsük le a HTML-t a Reddit címlapjáról a Puppeteer használatával a kérés-ígéret helyett.
Kimenet:
Szép! Az oldal kitöltve a megfelelő tartalommal!

Most már használhatjuk a Chrome DevTools alkalmazást, mint az előző példában.

Úgy tűnik, hogy a Reddit „h2” címkékbe helyezi a címeket. A Cheerio.js segítségével nyerjük ki a h2 címkéket az oldalról.
Kimenet:
További források
És ott van a lista! Ezen a ponton jól érezheti magát, amikor megírja első webkaparóját, hogy adatokat gyűjtsön bármely webhelyről. Íme néhány további forrás, amelyet hasznosnak találhat a webes adatgyűjtés során:
- Webes kaparó proxy szolgáltatások listája
- A praktikus webkaparó eszközök listája
- Webes kaparási tippek listája
- A webes kaparó proxyk összehasonlítása
- Cheerio dokumentáció
- Bábos dokumentáció