Веб стругање, такође познато као екстракција веб података, је аутоматизовани метод издвајања података или садржаја са веб страница.

Веб стругачи аутоматизују екстракцију података без људског уплитања. Скрапер приступа веб страници слањем ХТТП захтева, слично као што то ради веб претраживач. Међутим, уместо да прикаже ХТМЛ који преузима, он га обрађује у складу са вашим упутствима и чува резултат.

Веб стругачи су корисни за преузимање података са веб локација које не пружају АПИ-је. Популарни су у областима као што су наука о подацима, сајбер безбедност, фронтенд и развој позадинског дела.

Веб Сцрапинг у Го

У Го-у постоје разни пакети за гребање веба. Популарни укључују гокуери, Цолли и ЦхромеДП.

ЦхромеДП је пакет веб драјвера сличан селену. Подржава протокол Цхроме алатки за програмере у Го без зависности.

Цолли је библиотека специфична за веб сцрапинг направљена помоћу гокуери-ја. Али гокуери је бржа опција за гребање веб локација у Го-у.

Шта је гокуери?

ЦСС библиотека, јКуери, помогла је у инспирацији

instagram viewer
гокуери. То је Го библиотека заснована на нет/хтмл пакет, који имплементира токенизер и парсер компатибилан са ХТМЛ5. Такође користи Цасцадиа пакет, који имплементира ЦСС селекторе за употребу са парсером који обезбеђује нет/хтмл.

Инсталирање гокуери-ја

Покрените наредбу испод у свом терминалу да бисте инсталирали гокуери. Ако наиђете на грешке, покушајте да ажурирате своју Го верзију.

иди набавите гитхуб.цом/ПуеркитоБио/гокуери

Процес Веб Сцрапинг

Укупан процес стругања можете поделити на три мања задатка:

  1. Прављење ХТТП захтева.
  2. Коришћење селектора и локатора да добијете потребне податке.
  3. Чување података у бази података или структура података за даљу обраду.

Прављење ХТТП захтева у Го

Можете да шаљете ХТТП захтеве користећи нет/хттп пакет који укључује Го стандардна библиотека.

пакет главни

увоз "нет/хттп"
увоз "Пријава"
увоз "фмт"

фунцглавни() {
вебУрл := "хттпс://news.ycombinator.com/"
одговор, грешка:= хттп. Преузми (вебУрл)

ако ерр != нула {
Пријава. Фаталн (ерр)
} другоако одговор. СтатусЦоде == 200 {
фмт. Принтлн("Можемо да изгребемо ово")
} друго {
Пријава. Фаталлн("Немој да стругаш ово")
}
}

хттп. Добити враћа тело одговора и грешку. одговор. СтатусЦоде је статусни код захтев-одговор.

Приликом постављања ХТТП захтева, ако код статуса одговора је 200 можете да наставите да скрапате веб локацију.

Добијање потребних података помоћу гокуери-а

Добијање ХТМЛ-а веб локације

Прво, морате да рашчланите обичан ХТМЛ из одговора (одговор.тело) да бисте добили комплетан објекат документа који представља веб страницу:

документ, ерр := гокуери. НевДоцументФромРеадер (одговор. тело)

ако ерр != нула {
Пријава. Фаталн (ерр)
}

Сада можете да користите објекат документа за приступ структури и садржају који веб страница садржи.

Одабир потребних елемената из ХТМЛ-а

Мораћете да прегледате веб страницу да бисте проверили структуру података које треба да издвојите. Ово ће вам помоћи да направите селектор за приступ.

Користећи селекторе и локаторе, можете издвојити ХТМЛ који вам је потребан помоћу Финд метода објекта документа.

Тхе Финд метода узима ЦСС селектор да лоцира елемент који садржи податке који су вам потребни:

документ. Финд("тр.атхинг")

Горњи код враћа само први ХТМЛ елемент који се подудара са селектором или празну листу ако уопште није било подударања.

Одабир више елемената из ХТМЛ-а

Већину времена ћете желети да преузмете све ХТМЛ елементе који одговарају вашем селектору.

Можете одабрати све одговарајуће елементе у ХТМЛ-у користећи Сваки метод вредности који Финд() враћа. Тхе Сваки метода узима функцију са два параметра: индексом и селектором типа *гокуери. Селекција.

документ. Финд("тр.атхинг").Еацх(фунц(индекс инт, селектор *гокуери. Избор) {
/* Селектор процеса овде */
})

У телу функције можете да изаберете одређене податке које желите из ХТМЛ-а. У овом случају, потребне су вам везе и наслови сваког поста на страници. Користити Финд метод параметра селектора да се сузи скуп елемената и издвоји текст или вредности атрибута.

документ. Финд("тр.атхинг").Еацх(фунц(индекс инт, селектор *гокуери. Избор) {
титле := селектор. Финд("тд.титле").Тект()
линк, пронађен := селектор. Финд("а.титлелинк").Аттр("хреф")
})

Код изнад позива тхе Текст метода резултата из селектор. Финд да бисте издвојили садржај ћелије табеле. Одабир атрибута—као што су УРЛ-ови линкова и слика—захтева да користите Аттр методом. Овај метод такође враћа вредност која показује да ли атрибут уопште постоји.

Процес је исти за одабир свих елемената и атрибута са веб странице.

Тхе Финд метода је веома моћна, омогућавајући широк спектар операција за одабир и лоцирање ХТМЛ елемената. Можете их истражити у гокуери документацији.

Чување унесених података

Атрибут везе и наслов су стрингови које можете да доделите променљивим. У стварним сценаријима, чуваћете у бази података или структури података ради манипулације. Често ће бити довољна једноставна прилагођена структура.

Направите структуру са пољима наслов и везу и део структура за држање типа структуре.

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

Када креирате структуру и исечак, у телу функције методе документа, попуните исечак у функцији коју проследите методи Финд. Користите тип структуре за инстанцирање нових структура података, од којих свака садржи један резултат.

инфо = додати(инфо, информације{
наслов: наслов,
веза: веза,
})

Ово додаје типове Информације(структура) на инфо(одсјечак) из којег можете манипулисати подацима како желите.

Штампање исечка показује да сте успешно састругали веб локацију и попунили исечак.

фмт. Принтлн (инфо)

Разумно је сачувати копиране податке у локални кеш како не бисте погодили сервер веб странице више него што је потребно. Ово не само да ће смањити саобраћај већ и убрзати вашу апликацију јер је брже преузимање локалних података него слање захтева и брисање веб локација.

Постоји много пакета базе података у Го-у које можете користити за чување података. Тхе база података/скл пакет подржава СКЛ базе података. Постоје и НоСКЛ клијенти базе података попут МонгоДБ Го драјвер, и базе података без сервера као што је ФаунаДБ користећи ФаунаДБ драјвер.

Суштина Веб Сцрапинг-а у Го

Ако покушавате да извучете податке са веб локације, гокуери је одлично место за почетак. Али то је моћан пакет који може учинити више од пуког гребања са веба. Више о његовој функционалности можете сазнати у званичној пројектној документацији.

Веб сцрапинг је важна вештина у различитим технолошким областима и добро ће вам доћи током многих ваших пројеката.

Како имплементирати концепте објектно оријентисаног програмирања у Го

Реад Нект

ОбјавиТвеетОбјавиЕмаил

Повезане теме

  • Програмирање
  • Веб Девелопмент
  • Програмирање

О аутору

Укеје Цхуквуемериво Гооднесс (3 објављена чланка)

Гооднесс је технички писац, бацкенд програмер и аналитичар података, који поједностављује различите технолошке теме док истражује ову фасцинантну област.

Више од Укеје Цхуквуемериво Гооднесс

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, рецензије, бесплатне е-књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили