Извличането на уеб данни, известно още като извличане на уеб данни, е автоматизиран метод за извличане на данни или съдържание от уеб страници.

Уеб скреперите автоматизират извличането на данни без човешка намеса. Скреперът осъществява достъп до уеб страница, като изпраща HTTP заявки, подобно на уеб браузъра. Въпреки това, вместо да показва HTML, който извлича, той го обработва според вашите инструкции и съхранява резултата.

Уеб скреперите са полезни за извличане на данни от уебсайтове, които не предоставят API. Те са популярни в области като науката за данни, киберсигурността, фронтенд и бекенд разработка.

Уеб Scraping в Go

В Go има различни пакети за изстъргване на мрежата. Популярните включват goquery, Colly и ChromeDP.

ChromeDP е пакет с уеб драйвери, подобен на селен. Той поддържа протокола за инструменти за разработчици на Chrome в Go без зависимости.

Colly е специфична за уеб изстъргване библиотека, създадена с помощта на goquery. Но goquery е по-бързият вариант за изстъргване на уебсайтове в Go.

instagram viewer

Какво е goquery?

CSS библиотеката, jQuery, помогна за вдъхновението goquery. Това е Go библиотека, базирана на net/html пакет, който имплементира HTML5-съвместим токенизатор и анализатор. Той също така използва пакета Cascadia, който внедрява CSS селектори за използване с парсера, предоставен от net/html.

Инсталиране на goquery

Изпълнете командата по-долу във вашия терминал, за да инсталирате goquery. Ако срещнете някакви грешки, опитайте да актуализирате вашата версия на Go.

отивам вземете github.com/PuerkitoBio/goquery

Процесът на уеб изстъргване

Можете да разделите цялостния процес на изстъргване на три по-малки задачи:

  1. Изготвяне на HTTP заявки.
  2. Използване на селектори и локатори за да получите необходимите данни.
  3. Записване на данни в база данни или структури от данни за по-нататъшна обработка.

Извършване на HTTP заявки в Go

Можете да изпращате HTTP заявки с помощта на net/http пакет, който включва стандартната библиотека на Go.

пакет главен

внос "net/http"
внос "дневник"
внос "fmt"

функцияглавен() {
webUrl := "https://news.ycombinator.com/"
отговор, err:= http. Вземете (webUrl)

ако греш!= нула {
дневник. Fatalln (грешка)
} другоако отговор. StatusCode == 200 {
fmt. Println("Можем да изстържем това")
} друго {
дневник. Fatalln("Не изстъргвайте това")
}
}

http Вземи връща тяло на отговор и грешка. отговор. StatusCode е кодът на състоянието на заявка-отговор.

При извършване на HTTP заявки, ако код на състоянието на отговора е 200 можете да продължите да изстъргвате уебсайта.

Получаване на необходимите данни с помощта на goquery

Получаване на HTML на уебсайта

Първо, трябва да анализирате обикновения HTML от отговора (отговор.тяло), за да получите пълен обект на документ, представляващ уеб страницата:

документ, err := goquery. NewDocumentFromReader (отговор. тяло)

ако греш!= нула {
дневник. Fatalln (грешка)
}

Вече можете да използвате обекта на документа за достъп до структурата и съдържанието, което съдържа уеб страницата.

Избиране на задължителни елементи от HTML

Ще трябва да проверите уеб страницата, за да проверите структурата на данните, които трябва да извлечете. Това ще ви помогне да създадете селектор за достъп до него.

Използвайки селектори и локатори, можете да извлечете необходимия HTML, като използвате намирам метод на обекта на документа.

В намирам методът взема CSS селектор, за да намери елемента, който съдържа данните, от които се нуждаете:

документ. Намери("tr.athing")

Кодът по-горе връща само първия HTML елемент, съответстващ на селектора, или празен списък, ако изобщо не е имало съвпадение.

Избиране на множество елементи от HTML

През повечето време ще искате да извлечете всички HTML елементи, които съответстват на вашия селектор.

Можете да изберете всички съвпадащи елементи в HTML, като използвате Всеки метод на стойността, която Намирам() се завръща. В Всеки методът приема функция с два параметъра: индекс и селектор от тип *goquery. Избор.

документ. Find("tr.athing").Each(функция(индекс международен, селектор *goquery. селекция) {
/* Селектор на процеси тук */
})

В тялото на функцията можете да изберете конкретните данни, които искате от HTML. В този случай се нуждаете от връзките и заглавията на всяка публикация, която изброява страницата. Използвай намирам метод на параметъра на селектора за стесняване на набора от елементи и извличане на текст или стойности на атрибути.

документ. Find("tr.athing").Each(функция(индекс международен, селектор *goquery. селекция) {
title := селектор. Find("td.title").Text()
връзка, намерен := селектор. Find("a.titlelink").Attr("href")
})

Кодът по-горе извиква Текст метод на резултата от селектор. намирам за да извлечете съдържанието на клетка на таблица. Избирането на атрибути – като URL адреси на връзки и изображения – изисква да използвате Attr метод. Този метод също така връща стойност, показваща дали атрибутът изобщо съществува.

Процесът е същият за избор на елементи и атрибути извън уеб страница.

В намирам методът е много мощен, позволявайки широк спектър от операции за избор и локализиране на HTML елементи. Можете да ги разгледате в документацията на goquery.

Запазване на изпипаните данни

Атрибутът на връзката и заглавието са низове, които можете да присвоите на променливи. В реални сценарии ще записвате в база данни или структура от данни за манипулиране. Често е достатъчна проста персонализирана структура.

Създайте структура с полета заглавие и връзка и отрязък от структури за задържане на типа структура.

Тип Информация структура {
връзка низ
заглавие низ
}
информация := направи([]Информация, 0)

След като създадете структурата и среза, в тялото на функцията на метода на документа, попълнете среза във функцията, която предавате на метода Find. Използвайте типа структура, за да инстанцирате нови структури от данни, всяка от които съдържа един резултат.

информация = добавете(информация, информация{
заглавие: заглавие,
връзка: връзка,
})

Това добавя видове Информация(структурата) към информация(срезът), от който можете да манипулирате данните, както желаете.

Отпечатването на среза показва, че успешно сте изстърглили уебсайта и сте го попълнили.

fmt. Println (информация)

Разумно е да запазите изпипаните данни в локален кеш, така че да не удряте сървъра на уеб страницата повече, отколкото е необходимо. Това не само ще намали трафика, но ще ускори приложението ви, тъй като е по-бързо да извличате локални данни, отколкото да правите заявки и да изстъргвате уебсайтове.

В Go има много пакети за бази данни, които можете да използвате, за да запазите данните. В база данни/sql пакетът поддържа SQL бази данни. Има и NoSQL клиенти за база данни като Драйвер за MongoDB Goи бази данни без сървър като FaunaDB, използващи Драйвер на FaunaDB.

Същността на Web Scraping в Go

Ако се опитвате да изтриете данни от уебсайт, goquery е отлично място за начало. Но това е мощен пакет, който може да направи повече от просто изстъргване в мрежата. Можете да разберете повече от неговата функционалност в официалната проектна документация.

Уеб изстъргването е важно умение в различни технологични области и ще ви бъде полезно по време на много от вашите проекти.

Как да внедрите концепции за обектно-ориентирано програмиране в Go

Прочетете Следващото

ДялтуитДялелектронна поща

Свързани теми

  • Програмиране
  • Уеб разработка
  • Програмиране

За автора

Ukeje Chukwuemeriwo Goodness (Публикувани 3 статии)

Goodness е технически писател, бекенд разработчик и анализатор на данни, който опростява различни технологични теми, докато изследва тази завладяваща област.

Още от Ukeje Chukwuemeriwo Goodness

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, ревюта, безплатни електронни книги и ексклузивни оферти!

Щракнете тук, за да се абонирате