Разбирање веб скрапинга: Ефикасно прикупљање података са интернета
Веб скрапинг омогућава ефикасно прикупљање огромних количина информација са интернета великом брзином. Посебно је користан у ситуацијама када веб странице не нуде структуриран приступ подацима путем АПИ-ја (програмских интерфејса апликација).
Замислите да правите апликацију која пореди цене производа на различитим сајтовима за електронску трговину. Како то постићи? Један од приступа је ручно проверавање цена на сваком сајту и бележење информација. Међутим, то није практично, јер постоје хиљаде производа и трајало би вечно да се прикупе релевантни подаци.
Боље решење је веб скрапинг. То је процес аутоматског извлачења информација са веб страница и сајтова уз помоћ специјализованог софтвера.
Софтверски скриптови, познати као веб скрапери, користе се за приступ сајтовима и преузимање података. Ти подаци су обично у неструктурисаном облику, али се могу анализирати и организовати на начин који је користан за кориснике.
Веб скрапинг је од велике вредности за извлачење података јер омогућава приступ огромним количинама информација и аутоматизацију. Можете да закажете покретање скрипте у одређено време или у зависности од одређених догађаја. Такође омогућава добијање ажурирања у реалном времену и олакшава спровођење истраживања тржишта.
Многе компаније и предузећа користе веб скрапинг за анализу података. Компаније из области људских ресурса, електронске трговине, финансија, некретнина, путовања, друштвених медија и истраживања користе га за извлачење релевантних информација са веб сајтова.
Сам Google користи веб скрапинг за индексирање веб локација на интернету како би корисницима могао да пружи релевантне резултате претраге.
Међутим, важно је бити опрезан приликом веб скрапинга. Иако извлачење јавно доступних података није незаконито, неки сајтови не дозвољавају скрапинг. То може бити због осетљивих корисничких информација, изричите забране у условима коришћења или заштите интелектуалне својине.
Такође, неки сајтови не дозвољавају веб скрапинг јер то може преоптеретити сервер и повећати трошкове пропусног опсега, посебно када се ради у великом обиму.
Да бисте проверили да ли је сајт дозвољен за скрапинг, додајте `robots.txt` на УРЛ адресу. Ова датотека говори ботовима који делови сајта су доступни за скрапинг. На пример, да бисте проверили да ли можете скрапирати Google, идите на `google.com/robots.txt`.
`User-agent: *` се односи на све ботове или софтверске скрипте и скрапере. `Disallow` се користи да би се ботовима рекло да не могу приступити ниједној УРЛ адреси у одређеном директоријуму, на пример `/search`. `Allow` означава директоријуме одакле могу приступити УРЛ адресама.
Пример сајта који не дозвољава скрапинг је LinkedIn. Да бисте проверили да ли можете скрапирати LinkedIn, идите на `linkedin.com/robots.txt`.
Као што видите, није вам дозвољено скрапирати LinkedIn без њихове дозволе. Увек проверите да ли сајт дозвољава скрапинг да бисте избегли правне проблеме.
Зашто је Јава погодан језик за веб скрапинг
Иако веб скрапере можете правити у различитим програмским језицима, Јава је посебно погодна за тај посао из више разлога. Прво, Јава има богат екосистем и велику заједницу, и нуди разне библиотеке за веб скрапинг, као што су Jsoup, WebMagic и HtmlUnit, које олакшавају писање веб скрапера.
Такође, обезбеђује библиотеке за рашчлањивање HTML-а, што поједностављује процес извлачења података из HTML докумената, као и мрежне библиотеке, као што је HttpURLConnection, за упућивање захтева различитим УРЛ адресама веб сајтова.
Јава има снажну подршку за истовременост и вишенитност, што је корисно за веб скрапинг јер омогућава паралелну обраду и руковање задацима скрапинга са више захтева. Тако можете скрапирати више страница истовремено. С обзиром на то да је скалабилност кључна снага Јаве, можете удобно скрапирати сајтове у великим количинама користећи веб скрапер написан у Јави.
Јавина подршка за више платформи је такође корисна, јер вам омогућава да напишете веб скрапер и покренете га у било ком систему са компатибилном Јава виртуелном машином. Дакле, можете написати скрапер у једном оперативном систему и покренути га у другом, без потребе да га мењате.
Јава се може користити и са претраживачима без графичког интерфејса, као што су Headless Chrome, HTML Unit, Headless Firefox и PhantomJS. Безглави претраживач је претраживач без графичког корисничког интерфејса. Ови претраживачи могу да симулирају интеракције корисника и веома су корисни када скрапујете сајтове који захтевају интеракцију корисника.
На крају, Јава је веома популаран и широко коришћен језик који се лако може интегрисати са разним алатима као што су базе података и оквири за обраду података. То је корисно јер осигурава да док скрапирате податке, сви алати који ће вам бити потребни за скрапинг, обраду и складиштење података вероватно подржавају Јаву.
Хајде да видимо како можемо да користимо Јаву за веб скрапинг.
Јава за веб скрапинг: предуслови
Да бисте користили Јаву за веб скрапинг, потребно је да испуните следеће предуслове:
1. Јава – требало би да имате инсталирану Јаву, по могућности најновију верзију са дугорочном подршком. У случају да немате Јаву, пронађите упутства за инсталацију.
2. Интегрисано развојно окружење (ИДЕ) – Требало би да имате инсталиран ИДЕ. У овом водичу ћемо користити IntelliJ IDEA, али можете користити било који ИДЕ који вам је познат.
3. Maven – ово ће се користити за управљање зависностима и за инсталирање библиотека за веб скрапинг.
У случају да немате инсталиран Maven, можете га инсталирати тако што ћете у терминалу покренути:
sudo apt install maven
Ово инсталира Maven из званичног спремишта. Можете потврдити да је Maven успешно инсталиран тако што ћете покренути:
mvn -version
Ако је инсталација била успешна, требало би да добијете сличан излаз:
Подешавање окружења
Да бисте подесили своје окружење:
1. Отворите IntelliJ IDEA. На левој траци менија кликните на Projects, а затим изаберите New Project.
2. У прозору New Project који се отвори, попуните га као што је приказано испод. Уверите се да је језик подешен на Java, а систем изградње на Maven. Пројекту можете дати било које име које желите, а затим употребите Location да бисте одредили директоријум где желите да се пројекат креира. Када завршите, кликните на Create.
3. Када је ваш пројекат креиран, требало би да имате `pom.xml` у свом пројекту, као што је приказано испод.
Датотеку `pom.xml` креира Maven и она садржи информације о пројекту и детаље о конфигурацији које Maven користи за израду пројекта. То је датотека коју користимо да означимо да ћемо користити спољне библиотеке.
У изградњи веб скрапера користићемо Jsoup библиотеку. Стога, морамо да је додамо као зависност у датотеку `pom.xml` како би Maven могао да је учини доступном у нашем пројекту.
4. Додајте зависност Jsoup у датотеку `pom.xml` копирањем кода испод и додавањем у своју датотеку `pom.xml`.
<dependencies> <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.16.1</version> </dependency> </dependencies>
Резултат би требало да буде као што је приказано у наставку:
У случају да наиђете на грешку која каже да се зависност не може пронаћи, кликните на означену икону да би Maven учитао направљене измене, учитао зависност и уклонио грешку.
Тиме је ваше окружење у потпуности подешено.
Веб скрапинг са Јавом
За веб скрапинг, ми ћемо скрапирати податке са ScrapeThisSite, која пружа окружење за вежбање веб скрапинга без правних проблема.
Да бисте скрапирали веб страницу користећи Јаву:
1. На левој траци менија на IntelliJ-у отворите `src` директоријум, затим `main` директоријум, који се налази унутар `src` директоријума. `main` директоријум садржи директоријум `java`; кликните десним тастером миша на њега и изаберите New, а затим Java Class.
Дајте класи било које име које желите, као што је WebScraper, а затим притисните Enter да бисте креирали нову Java класу.
Отворите новокреирану датотеку која садржи Јава класу коју сте управо креирали.
2. Веб скрапинг подразумева добијање података са веб сајтова. Због тога морамо да наведемо УРЛ са којег желимо да извучемо податке. Када одредимо УРЛ, морамо се повезати са њим и направити GET захтев за преузимање HTML садржаја странице.
Код који то ради је приказан испод:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.IOException; public class WebScraper { public static void main(String[] args) { String url = "https://www.scrapethissite.com/pages/simple/"; try { Document doc = Jsoup.connect(url).get(); System.out.println(doc); } catch (IOException e) { System.out.println("An IOException occurred. Please try again."); } } }
Излаз:
Као што видите, враћа се HTML код странице, и то штампамо. Приликом скрапинга, УРЛ који наведете може имати грешку, а ресурс који покушавате да скрапирате можда уопште не постоји. Зато је важно да наш код умотамо у блок `try-catch`.
Линија:
Document doc = Jsoup.connect(url).get();
се користи за повезивање са УРЛ адресом коју желите да скрапирате. Метод `get()` се користи за прављење GET захтева и преузимање HTML-а са странице. Враћени резултат се затим чува у Jsoup објекту типа Document, под називом `doc`. Чување резултата у Jsoup Document омогућава вам да користите Jsoup API за манипулацију враћеним HTML-ом.
3. Идите на ScrapeThisSite и прегледајте страницу. У HTML-у би требало да видите структуру приказану испод:
Имајте на уму да су све земље на страници приказане у сличној структури. Постоји div са класом `country` са елементом `h3` са класом `country-name` који садржи назив сваке земље на страници.
Унутар главног div-а налази се још један div са класом `country-info`, који садржи информације као што су главни град, број становника и површина земље. Можемо користити ове називе класа за одабир HTML елемената и извлачење информација из њих.
4. Извуците одређени садржај из HTML-а са странице користећи следеће редове:
Elements countries = doc.select(".country"); for (Element country : countries) { String countryName = country.select(".country-name").text(); String capitalCity = country.select(".country-capital").text(); String population = country.select(".country-population").text(); System.out.println(countryName + " - " + capitalCity + " Population - " + population); }
Користимо метод `select()` да изаберемо елементе из HTML-а странице који одговарају CSS селектору који прослеђујемо. У нашем случају, ми прослеђујемо имена класа. Прегледајући страницу, видели смо да се све информације о земљи на страници чувају унутар div-а са класом `country`.
Свака земља има свој div са класом `country` и тај div садржи информације као што су назив земље, главни град и број становника.
Због тога прво бирамо све земље на страници користећи класу `.country`. Затим чувамо ово у променљивој под називом `countries` типа Elements, која ради као листа. Затим користимо `for` петљу да прођемо кроз земље и извучемо назив земље, главни град и број становника и одштампамо оно што смо пронашли.
Цела наша кодна база је приказана испод:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import org.jsoup.nodes.Element; import java.io.IOException; public class WebScraper { public static void main(String[] args) { String url = "https://www.scrapethissite.com/pages/simple/"; try { Document doc = Jsoup.connect(url).get(); Elements countries = doc.select(".country"); for (Element country : countries) { String countryName = country.select(".country-name").text(); String capitalCity = country.select(".country-capital").text(); String population = country.select(".country-population").text(); System.out.println(countryName + " - " + capitalCity + " - Population - " + population); } } catch (IOException e) { System.out.println("An IOException occurred. Please try again."); } } }
Излаз:
Са информацијама које добијемо са странице, можемо да урадимо разне ствари, као што је да их одштампамо као што смо управо урадили или да их сачувамо у датотеци у случају да желимо да извршимо даљу обраду података.
Закључак
Веб скрапинг је одличан начин за издвајање неструктурираних података са веб сајтова, складиштење података на структуриран начин и обраду података за издвајање корисних информација. Међутим, важно је бити опрезан приликом веб скрапинга, јер одређене веб странице не дозвољавају веб скрапинг.
Да бисте били сигурни, користите сајтове који пружају окружења за вежбање веб скрапинга. У супротном, увек проверите датотеку `robots.txt` сваког сајта који желите да скрапирате да бисте сазнали да ли сајт дозвољава скрапинг.
Када пишете веб скрапер, Јава је одличан језик јер нуди библиотеке које чине веб скрапинг лакшим и ефикаснијим. Као Јава програмер, прављење веб скрапера ће вам помоћи да још више развијете своје програмерске вештине. Зато слободно напишите свој веб скрапер или модификујте онај који се користи у чланку да бисте извукли различите врсте информација. Срећно са кодирањем!
Такође можете истражити нека популарна решења за веб скрапинг заснована на облаку.