Web scraping, tiež známy ako extrakcia webových údajov, je automatizovaná metóda extrakcie údajov alebo obsahu z webových stránok.

Webové škrabky automatizujú extrakciu údajov bez ľudského zásahu. Škrabka pristupuje na webovú stránku odosielaním požiadaviek HTTP, podobne ako webový prehliadač. Namiesto zobrazenia načítaného HTML ho však spracuje podľa vašich pokynov a uloží výsledok.

Webové škrabky sú užitočné pri získavaní údajov z webových stránok, ktoré neposkytujú API. Sú populárne v oblastiach, ako je veda o údajoch, kybernetická bezpečnosť, frontend a vývoj backendu.

Web Scraping in Go

V Go sú rôzne balíčky na zoškrabovanie webu. Medzi obľúbené patria goquery, Colly a ChromeDP.

ChromeDP je balík webových ovládačov podobný selénu. Podporuje protokol nástrojov pre vývojárov Chrome v Go bez závislostí.

Colly je knižnica špecifická pre webové zoškrabovanie vytvorená pomocou goquery. Goquery je však rýchlejšia možnosť na zoškrabovanie webových stránok v Go.

Čo je goquery?

Knižnica CSS, jQuery, pomohla inšpirovať

instagram viewer
goquery. Je to knižnica Go založená na net/html balík, ktorý implementuje tokenizér a syntaktický analyzátor v súlade s HTML5. Používa tiež balík Cascadia, ktorý implementuje selektory CSS na použitie so syntaktickým analyzátorom, ktorý poskytuje net/html.

Inštalácia goquery

Spustite príkaz uvedený nižšie vo svojom termináli a nainštalujte goquery. Ak narazíte na nejaké chyby, skúste aktualizovať verziu Go.

ísť získajte github.com/PuerkitoBio/goquery

Proces zoškrabovania webu

Celkový proces zoškrabovania môžete rozdeliť na tri menšie úlohy:

  1. Vytváranie požiadaviek HTTP.
  2. Používanie selektorov a lokátorov na získanie požadovaných údajov.
  3. Ukladanie dát do databázy alebo dátových štruktúr na ďalšie spracovanie.

Vytváranie požiadaviek HTTP v Go

Požiadavky HTTP môžete odosielať pomocou net/http balík, ktorý štandardná knižnica Go obsahuje.

balík Hlavná

importovať "net/http"
importovať "log"
importovať "fmt"

funcHlavná() {
webUrl := "https://news.ycombinator.com/"
odpoveď, chyba:= http. Získať (webUrl)

ak chyba!= nula {
log. Fatalln (chyba)
} inakak odpoveď. Stavový kód == 200 {
fmt. Println("Môžeme to zoškrabať")
} inak {
log. Fatalln("Neoškrabuj to")
}
}

http. Získajte vráti telo odpovede a chybu. odpoveď. StatusCode je stavový kód žiadosť-odpoveď.

Pri vytváraní požiadaviek HTTP, ak kód stavu odpovede je 200 môžete pokračovať v zoškrabaní webovej stránky.

Získanie požadovaných údajov pomocou goquery

Získanie HTML webovej stránky

Najprv musíte analyzovať obyčajný HTML z odpovede (odozva.telo), aby ste získali úplný objekt dokumentu predstavujúci webovú stránku:

dokument, chyba := goquery. NewDocumentFromReader (odpoveď. telo)

ak chyba!= nula {
log. Fatalln (chyba)
}

Teraz môžete použiť objekt dokumentu na prístup k štruktúre a obsahu, ktorý webová stránka obsahuje.

Výber požadovaných prvkov z HTML

Budete musieť skontrolovať webovú stránku a skontrolovať štruktúru údajov, ktoré potrebujete extrahovať. Pomôže vám to zostaviť selektor na prístup k nemu.

Pomocou selektorov a lokátorov môžete extrahovať potrebný kód HTML pomocou Nájsť metóda objektu dokumentu.

The Nájsť metóda používa selektor CSS na nájdenie prvku, ktorý obsahuje požadované údaje:

dokument. Nájsť("tr.athing")

Vyššie uvedený kód vráti iba prvý prvok HTML zodpovedajúci selektoru alebo prázdny zoznam, ak sa zhoda vôbec nenašla.

Výber viacerých prvkov z HTML

Väčšinu času budete chcieť načítať všetky prvky HTML, ktoré zodpovedajú vášmu selektoru.

Všetky zodpovedajúce prvky v HTML môžete vybrať pomocou Každý metóda hodnoty, ktorá Nájsť() sa vracia. The Každý metóda preberá funkciu s dvoma parametrami: index a selektor typu *goquery. Výber.

dokument. Nájsť("tr.athing").Každý(func(index int, selektor *goquery. výber) {
/* Výber procesu tu */
})

V tele funkcie môžete vybrať konkrétne údaje, ktoré chcete z HTML. V tomto prípade potrebujete odkazy a názvy každého príspevku, ktorý stránka uvádza. Použi Nájsť metóda parametra selektora na zúženie množiny prvkov a extrahovanie hodnôt textu alebo atribútov.

dokument. Nájsť("tr.athing").Každý(func(index int, selektor *goquery. výber) {
titulok := selektor. Nájsť("td.title").Text()
odkaz, nájdený := selektor. Find("a.titlelink").Attr("href")
})

Vyššie uvedený kód volá Text spôsob výsledku z selektor. Nájsť extrahovať obsah bunky tabuľky. Výber atribútov, ako sú adresy URL odkazov a obrázkov, vyžaduje, aby ste použili Attr metóda. Táto metóda tiež vracia hodnotu označujúcu, či atribút vôbec existuje.

Proces je rovnaký pre výber akýchkoľvek prvkov a atribútov z webovej stránky.

The Nájsť metóda je veľmi výkonná a umožňuje široké spektrum operácií na výber a lokalizáciu prvkov HTML. Môžete ich preskúmať v dokumentácii goquery.

Ukladanie zoškrabaných údajov

Atribút odkazu a názov sú reťazce, ktoré môžete priradiť premenným. V reálnych scenároch budete ukladať do databázy alebo dátovej štruktúry na manipuláciu. Často postačí jednoduchá vlastná štruktúra.

Vytvorte štruktúru s poľami názov a odkaz a časť štruktúr na uloženie typu struct.

typu Informácie štrukturovať {
odkaz reťazec
titul reťazec
}
info := urobiť([]Informácie, 0)

Po vytvorení štruktúry a rezu v tele funkcie metódy dokumentu vyplňte rez vo funkcii, ktorú odovzdáte metóde Find. Použite typ struct na vytvorenie inštancie nových dátových štruktúr, z ktorých každá obsahuje jeden výsledok.

info = priložiť(informácie, informácie{
názov: názov,
link: link,
})

Toto pripája typy Informácie(štruktúra) na Info(výrez), z ktorého môžete s údajmi manipulovať, ako chcete.

Vytlačenie rezu ukazuje, že ste úspešne odstránili webovú stránku a naplnili rez.

fmt. Println (informácie)

Je rozumné uložiť zoškrabané údaje do lokálnej vyrovnávacej pamäte, aby ste na server webovej stránky nezasiahli viac, ako potrebujete. Tým sa nielen zníži návštevnosť, ale aj vaša aplikácia sa zrýchli, pretože získavanie miestnych údajov je rýchlejšie ako odosielanie žiadostí a zoškrabovanie webových stránok.

V Go je veľa databázových balíkov, ktoré môžete použiť na uloženie údajov. The databáza/sql balík podporuje SQL databázy. Existujú aj databázové klienty NoSQL, ako napr Ovládač MongoDB Goa databázy bez serverov, ako je FaunaDB pomocou Ovládač FaunaDB.

Podstata zoškrabovania webu v hre

Ak sa pokúšate zoškrabať údaje z webovej stránky, goquery je skvelým miestom, kde začať. Je to však výkonný balík, ktorý dokáže viac ako len zoškrabovanie webu. Viac o jeho funkcionalite sa dozviete v oficiálnej projektovej dokumentácii.

Web scraping je dôležitá zručnosť v rôznych technologických oblastiach a bude sa vám hodiť pri mnohých vašich projektoch.

Ako implementovať koncepty objektovo orientovaného programovania v Go

Prečítajte si ďalej

zdieľamTweetujtezdieľamEmail

Súvisiace témy

  • Programovanie
  • Vývoj webových aplikácií
  • Programovanie

O autorovi

Ukeje Chukwuemeriwo Dobrota (zverejnené 3 články)

Goodness je technický spisovateľ, backendový vývojár a dátový analytik, ktorý pri skúmaní tejto fascinujúcej oblasti zjednodušuje rôzne technologické témy.

Viac od Ukeje Chukwuemeriwo Dobrota

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné e-knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber