Web scraping, znany również jako ekstrakcja danych z sieci, to zautomatyzowana metoda wyodrębniania danych lub treści ze stron internetowych.

Skrobaki internetowe automatyzują ekstrakcję danych bez ingerencji człowieka. Skrobak uzyskuje dostęp do strony internetowej, wysyłając żądania HTTP, podobnie jak robi to przeglądarka internetowa. Jednak zamiast wyświetlać pobrany kod HTML, przetwarza go zgodnie z twoimi instrukcjami i przechowuje wynik.

Skrobaki internetowe przydają się do pobierania danych z witryn, które nie udostępniają interfejsów API. Są popularne w dziedzinach takich jak data science, cyberbezpieczeństwo, frontend i rozwój backendu.

Skrobanie stron internetowych w Go

W Go dostępne są różne pakiety web scrapingu. Popularne z nich to goquery, Colly i ChromeDP.

ChromeDP to pakiet sterowników internetowych podobny do selenu. Obsługuje protokół narzędzi programistycznych Chrome w Go bez zależności.

Colly to biblioteka przeznaczona do skrobania stron internetowych, zbudowana przy użyciu goquery. Ale goquery to szybsza opcja do scrapingu stron internetowych w Go.

instagram viewer

Co to jest goquery?

Biblioteka CSS, jQuery, pomogła zainspirować goquery. Jest to biblioteka Go oparta na sieć/html pakiet, który implementuje zgodny z HTML5 tokenizer i parser. Używa również pakietu Cascadia, który implementuje selektory CSS do użytku z parserem dostarczanym przez net/html.

Instalowanie goquery

Uruchom poniższe polecenie w swoim terminalu, aby zainstalować goquery. Jeśli napotkasz jakiekolwiek błędy, spróbuj zaktualizować swoją wersję Go.

iść pobierz github.com/PuerkitoBio/goquery

Proces skrobania sieci

Możesz podzielić cały proces skrobania na trzy mniejsze zadania:

  1. Wykonywanie żądań HTTP.
  2. Korzystanie z selektorów i lokalizatorów aby uzyskać wymagane dane.
  3. Zapisywanie danych w bazie danych lub strukturach danych do dalszego przetwarzania.

Wykonywanie żądań HTTP w Go

Możesz wysyłać żądania HTTP za pomocą sieć/http pakiet, który zawiera standardowa biblioteka Go.

pakiet Główny

import „sieć/http”
import "dziennik"
import „fmt”

funkcjonowaćGłówny() {
webUrl := "https://news.ycombinator.com/"
odpowiedź, błąd:= http. Pobierz (webUrl)

jeśli błąd != zero {
dziennik. Śmiertelny (błąd)
} w przeciwnym raziejeśli odpowiedź. Kod statusu == 200 {
fmt. Println("Możemy to zeskrobać")
} w przeciwnym razie {
dziennik. Fatalln("Nie zeskrobuj tego")
}
}

http. Otrzymać zwraca treść odpowiedzi i błąd. odpowiedź. Kod statusu to kod stanu żądanie-odpowiedź.

Podczas wysyłania żądań HTTP, jeśli kod stanu odpowiedzi jest 200 możesz przystąpić do zeskrobywania strony internetowej.

Pobieranie wymaganych danych za pomocą goquery

Pobieranie kodu HTML strony internetowej

Najpierw musisz przeanalizować zwykły kod HTML z odpowiedzi (odpowiedź.ciało), aby uzyskać kompletny obiekt dokumentu reprezentujący stronę internetową:

dokument, błąd := goquery. NewDocumentFromReader (odpowiedź. Ciało)

jeśli błąd != zero {
dziennik. Śmiertelny (błąd)
}

Możesz teraz użyć obiektu dokumentu, aby uzyskać dostęp do struktury i zawartości strony internetowej.

Wybieranie wymaganych elementów z HTML

Będziesz musiał sprawdzić stronę internetową, aby sprawdzić strukturę danych, które chcesz wyodrębnić. Pomoże ci to skonstruować selektor, aby uzyskać do niego dostęp.

Korzystając z selektorów i lokalizatorów, możesz wyodrębnić potrzebny kod HTML za pomocą Znajdować metoda obiektu dokumentu.

ten Znajdować Metoda wykorzystuje selektor CSS do zlokalizowania elementu, który zawiera wymagane dane:

dokument. Znajdź("tr.thing")

Powyższy kod zwraca tylko pierwszy element HTML pasujący do selektora lub pustą listę, jeśli w ogóle nie było dopasowania.

Wybieranie wielu elementów z HTML

W większości przypadków będziesz chciał pobrać wszystkie elementy HTML, które pasują do Twojego selektora.

Możesz zaznaczyć wszystkie pasujące elementy w kodzie HTML za pomocą Każdy metoda wartości, która Znajdować() zwroty. ten Każdy metoda przyjmuje funkcję o dwóch parametrach: indeksie i selektorze typu *goquery. Wybór.

dokument. Find("tr.thing").Each(funkcjonować(indeks int, selektor *goquery. Wybór) {
/* Selektor procesu tutaj */
})

W treści funkcji możesz wybrać określone dane z kodu HTML. W takim przypadku potrzebujesz linków i tytułów każdego posta na liście stron. Użyj Znajdować metoda parametru selektora, aby zawęzić zbiór elementów i wyodrębnić tekst lub wartości atrybutów.

dokument. Find("tr.thing").Each(funkcjonować(indeks int, selektor *goquery. Wybór) {
tytuł := selektor. Znajdź("td.tytuł").Text()
link, znaleziony := selektor. Znajdź("a.titlelink").Attr("href")
})

Powyższy kod wywołuje Tekst metoda wyniku z selektor. Znajdować aby wyodrębnić zawartość komórki tabeli. Wybranie atrybutów, takich jak adresy URL linków i obrazów, wymaga użycia Attr metoda. Ta metoda zwraca również wartość wskazującą, czy atrybut w ogóle istnieje.

Proces jest taki sam w przypadku wybierania dowolnych elementów i atrybutów ze strony internetowej.

ten Znajdować Metoda jest bardzo potężna, pozwalając na szeroki zakres operacji, aby wybrać i zlokalizować elementy HTML. Możesz je zbadać w dokumentacji goquery.

Zapisywanie zeskrobanych danych

Atrybut linku i tytuł to ciągi, które można przypisać do zmiennych. W rzeczywistych scenariuszach będziesz zapisywać do bazy danych lub struktury danych do manipulacji. Często wystarczy prosta niestandardowa struktura.

Utwórz strukturę z polami tytuł i łącze oraz wycinek struktur do przechowywania typu struktury.

rodzaj Informacja struktura {
połączyć strunowy
tytuł strunowy
}
informacje := robić([]Informacja, 0)

Po utworzeniu struktury i wycinka w treści funkcji metody dokumentu wypełnij wycinek w funkcji, którą przekazujesz do metody Find. Użyj typu struct, aby utworzyć wystąpienie nowych struktur danych, z których każda zawiera jeden wynik.

informacja = dodać(informacje, informacje{
tytuł: tytuł,
link: link,
})

To dodaje typy Informacja(struktura) do informacje(kawałek), z którego można dowolnie manipulować danymi.

Wydrukowanie wycinka pokazuje, że udało Ci się zeskrobać witrynę i wypełnić wycinek.

fmt. Drukujln (informacje)

Rozsądne jest zapisywanie zeskrobanych danych w lokalnej pamięci podręcznej, aby nie uderzać w serwer strony internetowej więcej niż to konieczne. To nie tylko zmniejszy ruch, ale także przyspieszy działanie Twojej aplikacji, ponieważ pobieranie danych lokalnych jest szybsze niż wysyłanie żądań i usuwanie stron internetowych.

W Go jest wiele pakietów baz danych, których można użyć do zapisania danych. ten baza danych/sql pakiet obsługuje bazy danych SQL. Istnieją również klienty baz danych NoSQL, takie jak Sterownik MongoDB Gooraz bezserwerowe bazy danych, takie jak FaunaDB, korzystające z Sterownik FaunaDB.

Esencja skrobania sieci w Go

Jeśli próbujesz zeskrobać dane ze strony internetowej, goquery to doskonałe miejsce na rozpoczęcie. Ale jest to potężny pakiet, który może zrobić więcej niż tylko skrobanie sieci. Więcej informacji o jego funkcjonalności można znaleźć w oficjalnej dokumentacji projektu.

Web scraping jest ważną umiejętnością w różnych dziedzinach technologii i przyda się podczas wielu Twoich projektów.

Jak wdrożyć koncepcje programowania obiektowego w Go

Czytaj dalej

UdziałĆwierkaćUdziałE-mail

Powiązane tematy

  • Programowanie
  • Tworzenie stron internetowych
  • Programowanie

O autorze

Ukeje Chukwuemeriwo Dobroć (3 opublikowane artykuły)

Goodness jest autorem tekstów technicznych, programistą backendowym i analitykiem danych, upraszczającym różne tematy technologiczne podczas eksploracji tej fascynującej dziedziny.

Więcej od Ukeje Chukwuemeriwo Dobroć

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować