Oglas

Web Crawling je izuzetno koristan za automatizaciju određenih zadataka koji se rutinski izvode na web stranicama. Možete napisati alat za indeksiranje za interakciju s web-mjestom baš kao što bi to činio i čovjek.

U raniji članak Kako izraditi osnovni web alat za indeksiranje za povlačenje informacija s web-mjestaJeste li ikada željeli prikupiti informacije s web stranice? Evo kako napisati alat za indeksiranje za navigaciju web-mjestom i izdvajanje onoga što vam treba. Čitaj više , pokrili smo osnove pisanja a webcrawler Što je Web Scraping? Kako prikupiti podatke s web-mjestaJeste li ikada zatekli da gubite dragocjeno vrijeme čitajući podatke na web stranicama? Evo kako pronaći podatke koje želite pomoću web scrapinga. Čitaj više pomoću python modula, scrapy. Ograničenje tog pristupa je da alat za indeksiranje ne podržava javascript. Neće ispravno raditi s onim web-mjestima koja intenzivno koriste javascript za upravljanje korisničkim sučeljem. Za takve situacije možete napisati alat za indeksiranje koji koristi Google Chrome i stoga može rukovati javascriptom kao i normalni preglednik Chrome kojim upravljaju korisnici.

Automatizacija Google Chromea uključuje korištenje alata tzv Selen. To je softverska komponenta koja se nalazi između vašeg programa i preglednika i pomaže vam da upravljate preglednikom kroz svoj program. U ovom članku vodit ćemo vas kroz cijeli proces automatizacije Google Chromea. Koraci općenito uključuju:

  • Postavljanje Selena
  • Korištenje preglednika Google Chrome za prepoznavanje dijelova web-stranice
  • Pisanje java programa za automatizaciju Google Chromea

U svrhu ovog članka, istražimo kako čitati Google Mail s java. Iako Google pruža API (Aplikacijsko programsko sučelje) za čitanje pošte, u ovom članku koristimo Selenium za interakciju s Google Mail-om radi demonstracije procesa. Google Mail intenzivno koristi javascript i stoga je dobar kandidat za učenje Selena.

Postavljanje Selena

Web upravljački program

Kao što je gore objašnjeno, Selen sastoji se od softverske komponente koja se izvodi kao zaseban proces i izvodi radnje u ime java programa. Ova komponenta se zove Web upravljački program i mora se preuzeti na vaše računalo.

Kliknite ovdje da biste otišli na stranicu za preuzimanje Seleniuma, kliknite na najnovije izdanje i preuzmite odgovarajuću datoteku za OS vašeg računala (Windows, Linux ili MacOS). To je ZIP arhiva koja sadrži chromedriver.exe. Izvucite ga na prikladno mjesto kao što je C:\WebDrivers\chromedriver.exe. Kasnije ćemo koristiti ovu lokaciju u java programu.

Java moduli

Sljedeći korak je postavljanje java modula potrebnih za korištenje Selena. Pod pretpostavkom da koristite Maven za izradu java programa, dodajte sljedeću ovisnost svojoj POM.xml.

org.seleniumhq.seleniumselen-java3.8.1

Kada pokrenete proces gradnje, sve potrebne module treba preuzeti i postaviti na vaše računalo.

Selen Prvi koraci

Počnimo sa Selenom. Prvi korak je stvaranje a ChromeDriver primjer:

Driver WebDriver = novi ChromeDriver(); 

To bi trebalo otvoriti prozor Google Chromea. Prijeđimo na stranicu Google pretraživanja.

driver.get(" http://www.google.com"); 

Dobiti referencu na element za unos teksta kako bismo mogli izvršiti pretragu. Element za unos teksta ima naziv q. Metodom lociramo HTML elemente na stranici WebDriver.findElement().

WebElement element = driver.findElement (Po.name("q")); 

Pomoću metode možete poslati tekst bilo kojem elementu sendKeys(). Pošaljimo pojam za pretraživanje i završimo ga novim redom kako bi pretraživanje odmah počelo.

element.sendKeys("terminator\n"); 

Sada kada je pretraga u tijeku, moramo pričekati stranicu s rezultatima. To možemo učiniti na sljedeći način:

novi WebDriverWait (driver, 10) .until (d -> d.getTitle().toLowerCase().startsWith("terminator")); 

Ovaj kod u osnovi govori Selenu da pričeka 10 sekundi i vrati se kada naslov stranice počne s terminator. Koristimo lambda funkciju za određivanje uvjeta za čekanje.

Sada možemo dobiti naslov stranice.

System.out.println("Naslov: " + driver.getTitle()); 

Kada završite sa sesijom, prozor preglednika se može zatvoriti pomoću:

driver.quit(); 

A to je, ljudi, jednostavna sesija preglednika kojom se upravlja pomoću Jave putem selena. Čini se prilično jednostavno, ali vam omogućuje programiranje puno stvari koje biste inače morali raditi ručno.

Korištenje Google Chrome Inspector

Inspektor Google Chromea Otkrijte probleme s web-lokacijom pomoću alata za razvojne programere Chrome ili FirebugaAko ste do sada pratili moje jQuery tutoriale, možda ste već naišli na neke probleme s kodom, a ne znate kako ih riješiti. Kada se suočite s nefunkcionalnim dijelom koda, vrlo je... Čitaj više je neprocjenjiv alat za identifikaciju elemenata koji će se koristiti sa Selenom. Omogućuje nam da ciljamo točan element iz Jave za izdvajanje informacija, kao i interaktivnu radnju kao što je klikanje na gumb. Ovdje je uvod o tome kako koristiti Inspector.

Otvorite Google Chrome i idite na stranicu, recimo stranicu za IMDb Liga pravde (2017.).

Pronađimo element koji želi ciljati, recimo sažetak filma. Desnom tipkom miša kliknite sažetak i odaberite "Inspect" iz skočnog izbornika.

kako napraviti web crawler sa selenom

Na kartici "Elementi" možemo vidjeti da je sažetak teksta a razd s klasom od sažetak_tekst.

kako napraviti web crawler sa selenom

Korištenje CSS-a ili XPath-a za odabir

Selen podržava odabir elemenata sa stranice pomoću CSS-a. (CSS dijalekt podržan je CSS2). Na primjer, za odabir teksta sažetka s gornje IMDb stranice, napisali bismo:

WebElement summaryEl = driver.findElement (By.cssSelector("div.summary_text")); 

Također možete koristiti XPath za odabir elemenata na vrlo sličan način (Go ovdje za specifikacije). Opet, da bismo odabrali tekst sažetka, učinili bismo:

WebElement summaryEl = driver.findElement (By.xpath("//div[@class='summary_text']")); 

XPath i CSS imaju slične mogućnosti tako da možete koristiti ono što vam odgovara.

Čitanje Google pošte s Jave

Pogledajmo sada složeniji primjer: dohvaćanje Google Mail-a.

Pokrenite Chrome Driver, idite na gmail.com i pričekajte dok se stranica ne učita.

Driver WebDriver = novi ChromeDriver(); driver.get(" https://gmail.com"); novi WebDriverWait (upravljački program, 10) .until (d -> d.getTitle().toLowerCase().startsWith("gmail")); 

Zatim potražite polje e-pošte (imenovano je s id identifikatorId) i unesite adresu e-pošte. Kliknite na Sljedeći gumb i pričekajte da se učita stranica s lozinkom.

/* Upišite korisničko ime/e-mail */ { driver.findElement (By.cssSelector("#identifierId")).sendKeys (e-pošta); driver.findElement (By.cssSelector(".RveJvd")).click(); } novi WebDriverWait (vozač, 10) .do (d ->! d.findElements (By.xpath("//div[@id='password']")).isEmpty() );

Sada unosimo lozinku, kliknemo na Sljedeći ponovno pritisnite gumb i pričekajte da se Gmail stranica učita.

/* Upišite lozinku */ { driver .findElement (By.xpath("//div[@id='password']//input[@type='password']")) .sendKeys (lozinka); driver.findElement (By.cssSelector(".RveJvd")).click(); } novi WebDriverWait (vozač, 10) .do (d ->! d.findElements (Po.xpath("//div[@class='Cp']")).isEmpty() );

Dohvatite popis redaka e-pošte i pređite preko svakog unosa.

Popisrows = driver .findElements (By.xpath("//div[@class='Cp']//table/tbody/tr")); for (WebElement tr: rows) { }

Za svaki unos dohvatite Iz polje. Imajte na umu da neki unosi From mogu imati više elemenata ovisno o broju ljudi u razgovoru.

{ /* Iz elementa */ System.out.println("Od: "); for (WebElement e: tr .findElements (By.xpath(".//div[@class='yW']/*"))) { System.out.println(" " + e.getAttribute("email") + ", " + e.getAttribute("name") + ", " + e.getText()); } }

Sada donesite temu.

{ /* Subject */ System.out.println("Sub: " + tr.findElement (By.xpath(".//div[@class='yNN']")).getText()); }

I datum i vrijeme poruke.

{ /* Datum/Vrijeme */ WebElement dt = tr.findElement (By.xpath("./td[8]/*")); System.out.println("Datum: " + dt.getAttribute("title") + ", " + dt.getText()); }

Ovdje je ukupan broj redaka e-pošte na stranici.

System.out.println (rows.size() + " mails."); 

I konačno, završili smo pa smo zatvorili preglednik.

driver.quit(); 

Da rezimiramo, možete koristiti Selenium s Google Chromeom za indeksiranje onih web-mjesta koje intenzivno koriste javascript. A uz Google Chrome Inspector, prilično je lako razraditi potreban CSS ili XPath za izdvajanje iz elementa ili interakciju s njim.

Imate li neke projekte koji imaju koristi od korištenja Selena? I s kojim se problemima susrećete s tim? Molimo opišite u komentarima ispod.