Web scraping, také známý jako webová extrakce dat, je automatizovaná metoda extrakce dat nebo obsahu z webových stránek.

Webové škrabky automatizují extrakci dat bez lidského zásahu. Škrabka přistupuje na webovou stránku odesíláním požadavků HTTP, podobně jako to dělá webový prohlížeč. Místo zobrazení HTML, které načte, jej však zpracuje podle vašich pokynů a uloží výsledek.

Webové škrabky se hodí pro načítání dat z webů, které neposkytují API. Jsou populární v oblastech, jako je datová věda, kybernetická bezpečnost, frontend a backendový vývoj.

Seškrabování webu v Go

V Go jsou různé balíčky web scraping. Mezi oblíbené patří goquery, Colly a ChromeDP.

ChromeDP je balíček webových ovladačů podobný selenu. Podporuje protokol vývojářských nástrojů Chrome v Go bez závislostí.

Colly je knihovna specifická pro web scraping vytvořená pomocí goquery. Goquery je ale rychlejší možností pro odstraňování webů v Go.

Co je goquery?

Knihovna CSS, jQuery, pomohla inspirovat goquery. Je to knihovna Go založená na

net/html balíček, který implementuje tokenizér a analyzátor kompatibilní s HTML5. Používá také balíček Cascadia, který implementuje selektory CSS pro použití s ​​parserem poskytovaným net/html.

Instalace goquery

Spusťte níže uvedený příkaz ve svém terminálu a nainstalujte goquery. Pokud narazíte na nějaké chyby, zkuste aktualizovat verzi Go.

jít získejte github.com/PuerkitoBio/goquery

Proces škrábání webu

Celkový proces škrábání můžete rozdělit na tři menší úkoly:

  1. Vytváření požadavků HTTP.
  2. Použití selektorů a lokátorů abyste získali požadovaná data.
  3. Ukládání dat do databáze nebo datových struktur pro další zpracování.

Vytváření požadavků HTTP v Go

Požadavky HTTP můžete odesílat pomocí net/http balíček, který standardní knihovna Go obsahuje.

balík hlavní

import "net/http"
import "log"
import "fmt"

funchlavní() {
webUrl := "https://news.ycombinator.com/"
odpověď, err:= http. Získat (webUrl)

-li chyba!= nula {
log. Fatalln (chyba)
} jiný-li Odezva. StatusCode == 200 {
fmt. Println("Můžeme to seškrábat")
} jiný {
log. Fatalln("Tohle neškrábej")
}
}

http. Dostat vrátí tělo odpovědi a chybu. Odezva. Stavový kód je stavový kód požadavek-odpověď.

Při vytváření požadavků HTTP, pokud kód stavu odpovědi je 200 můžete pokračovat ve skartování webu.

Získání požadovaných dat pomocí goquery

Získání HTML webu

Nejprve musíte analyzovat prostý HTML z odpovědi (odezva.tělo), abyste získali úplný objekt dokumentu představující webovou stránku:

dokument, chyba := goquery. NewDocumentFromReader (odpověď. Tělo)

-li chyba!= nula {
log. Fatalln (chyba)
}

Nyní můžete použít objekt dokumentu pro přístup ke struktuře a obsahu, který webová stránka obsahuje.

Výběr požadovaných prvků z HTML

Budete si muset prohlédnout webovou stránku a zkontrolovat strukturu dat, která potřebujete extrahovat. To vám pomůže vytvořit selektor pro přístup k němu.

Pomocí selektorů a lokátorů můžete extrahovat požadovaný HTML pomocí Nalézt metoda objektu dokumentu.

The Nalézt metoda používá selektor CSS k vyhledání prvku, který obsahuje požadovaná data:

dokument. Najít("tr.athing")

Výše uvedený kód vrátí pouze první prvek HTML odpovídající selektoru nebo prázdný seznam, pokud shoda vůbec nebyla.

Výběr více prvků z HTML

Většinu času budete chtít načíst všechny prvky HTML, které odpovídají vašemu selektoru.

Všechny odpovídající prvky v HTML můžete vybrat pomocí Každý metoda hodnoty, která Nalézt() se vrací. The Každý metoda přijímá funkci se dvěma parametry: indexem a selektorem typu *goquery. Výběr.

dokument. Najít("tr.athing").Každý(func(index int, selektor *goquery. Výběr) {
/* Selektor procesu zde */
})

V těle funkce můžete vybrat konkrétní data, která chcete z HTML. V tomto případě potřebujete odkazy a názvy každého příspěvku, který stránka uvádí. Použijte Nalézt metoda parametru selektoru pro zúžení množiny prvků a extrahování hodnot textu nebo atributů.

dokument. Najít("tr.athing").Každý(func(index int, selektor *goquery. Výběr) {
titulek := selektor. Najít("td.title").Text()
odkaz, nalezen := selektor. Najít("a.titlelink").Attr("href")
})

Výše uvedený kód volá Text metoda výsledku z volič. Nalézt extrahovat obsah buňky tabulky. Výběr atributů – jako jsou adresy URL odkazů a obrázků – vyžaduje použití Attr metoda. Tato metoda také vrací hodnotu označující, zda atribut vůbec existuje.

Proces je stejný pro výběr jakýchkoli prvků a atributů z webové stránky.

The Nalézt metoda je velmi výkonná a umožňuje širokou škálu operací pro výběr a umístění prvků HTML. Můžete je prozkoumat v dokumentaci goquery.

Uložení smazaných dat

Atribut odkazu a název jsou řetězce, které můžete přiřadit proměnným. V reálných scénářích budete ukládat do databáze nebo datové struktury pro manipulaci. Často postačí jednoduchá vlastní struktura.

Vytvořte strukturu s poli titulek a odkaz a část struktur pro uložení typu struct.

typ Informace strukturovat {
odkaz tětiva
titul tětiva
}
info := udělat([]Informace, 0)

Jakmile vytvoříte strukturu a řez, v těle funkce metody document naplňte řez funkcí, kterou předáte metodě Find. Použijte typ struct k vytvoření instance nových datových struktur, z nichž každá obsahuje jeden výsledek.

info = připojit(informace, informace{
titul: titul,
odkaz: odkaz,
})

Toto připojuje typy Informace(struktura) k info(slice), ze kterého můžete manipulovat s daty, jak chcete.

Tisk řezu ukazuje, že jste úspěšně odstranili web a naplnili řez.

fmt. Println (informace)

Je rozumné uložit seškrabovaná data do místní mezipaměti, abyste na server webové stránky nezasáhli více, než potřebujete. To nejen sníží provoz, ale zrychlí vaši aplikaci, protože je rychlejší načíst místní data, než zadávat požadavky a škrábat weby.

V Go je mnoho databázových balíčků, které můžete použít k uložení dat. The databáze/sql balíček podporuje SQL databáze. Existují také databázové klienty NoSQL, jako je např Ovladač mongoDB Goa bezserverové databáze jako FaunaDB pomocí Ovladač faunaDB.

Esence Web Scraping in Go

Pokud se pokoušíte získat data z webu, goquery je skvělé místo, kde začít. Ale je to výkonný balíček, který dokáže víc než jen škrábání webu. Více o jeho funkčnosti se dozvíte v oficiální projektové dokumentaci.

Web scraping je důležitá dovednost napříč různými technologickými oblastmi a bude se hodit při mnoha vašich projektech.

Jak implementovat koncepty objektově orientovaného programování v Go

Přečtěte si další

PodíltweetPodílE-mailem

Související témata

  • Programování
  • Vývoj webu
  • Programování

O autorovi

Ukeje Chukwuemeriwo Dobrota (Zveřejněny 3 články)

Goodness je technický spisovatel, backendový vývojář a datový analytik, který při zkoumání této fascinující oblasti zjednodušuje různá technologická témata.

Více od Ukeje Chukwuemeriwo Dobrota

Přihlaste se k odběru našeho newsletteru

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné e-knihy a exkluzivní nabídky!

Chcete-li se přihlásit k odběru, klikněte sem