Základy získávání informací z webových stránek

Občas potřebuji získat nějakou informaci z velkého množství stejných stránek. Může se jednat například o ceny výrobků v rámci jednoho e-shopu nebo parametry jednotlivých výrobků na stránkách výrobce.

Za několik let jsem používal různé nástroje, od komerčních klikacích (např. Mozenda) přes procházení DOM až po vlastní regulární výrazy. Posledních několik měsíců používám knihovnu jsoup. Jednoduše se naimportuje do projektu (ať už jako jar knihovna nebo pomocí Mavenu) a její používání je doslova na pár řádků.

Příklad na export nadpisů z wikipedie

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");

Jak je vidět, elementy se jednoduše adresují pomocí CSS tříd. Více příkladů je v Cookbooku.

Jsoup a čeština

Během používání jsem narazil pouze na jeden zásadnější problém – některé české znaky se správně neparsovaly a zobrazily se místo nich jen html entity, které navíc byly nesmyslné.

Po nedlouhém pátrání jsem tento problém vyřešil pomocnou metodou, kterou používám místo Jsoup.connect:

public static Document loadDoc(String uri) throws MalformedURLException,
			IOException {
		Document d = Jsoup.parse(new URL(uri).openStream(), "utf-8", uri);
		d.outputSettings().charset("UTF-8");
		d.outputSettings().escapeMode(EscapeMode.xhtml);
		System.out.println(uri);
		return d;
	}

Poznámka: Toto bude fungovat na webových stránkách v UTF-8, ale předpokládám, že pro jiná kódování to bude fungovat s drobnou úpravou také.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Můžete používat následující HTML značky a atributy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>