Parsovanie HTML v Jave s knižnicou Jsoup - pokračovanie
Pokračovanie tutoriálu o knižnici Jsoup, ktorá sa používa pre načítanie, vyhľadávanie a manipuláciu s html dokumenty.
Odkazy a obrázky
public class Jsoup05 { private static String urlString = "http://pctforum.tyden.cz/viewtopic.php?f=22&t=2131&sid=e4961b3cd95117044f1ec079ecaf92c2"; private static List<String> linkURLs = new ArrayList<>(); private static List<String> imageURLs = new ArrayList<>(); public static void main(String[] args) throws IOException { Document doc = Jsoup.connect(urlString).get(); // vyhledání elementů a s atributem href Elements links = doc.select("a[href]"); for (Element link : links) { System.out.println(link.attr("href")); System.out.println(link.attr("abs:href")); System.out.println(link.absUrl("href")); System.out.println("================================"); linkURLs.add(link.attr("abs:href")); } // vyhledání elementů img Elements images = doc.select("img"); for (Element image : images) { System.out.println(image.attr("src")); System.out.println(image.attr("abs:src")); System.out.println(image.absUrl("src")); System.out.println("================================"); imageURLs.add(image.attr("abs:src")); } System.out.println("Počet odkazů: " + linkURLs.size() + " | Výpis: " + Arrays.toString(linkURLs.toArray())); System.out.println("Počet obrázků: " + imageURLs.size() + " | Výpis: " + Arrays.toString(imageURLs.toArray())); } }
Elements links = doc.select("a[href]");
Vyhľadanie všetkých elementov a, ktoré majú atribút href.
System.out.println(link.attr("href"));
Získanie a výpis relatívnej url.
System.out.println(link.attr("abs:href")); System.out.println(link.absUrl("href"));
Získanie a výpis absolútnu url. Tu sú uvedené dva možné spôsoby a záleží na vás, ktorý si vyberiete. To isté platí aj pre elementy img, kde tiež najskôr získame a vypíšeme relatívnej url atribútu src a potom absolútnu url. Opäť sú uvedené oba spôsoby získania absolútnej url.
System.out.println("Počet odkazů: " + linkURLs.size() + " | Výpis: " + Arrays.toString(linkURLs.toArray())); System.out.println("Počet obrázků: " + imageURLs.size() + " | Výpis: " + Arrays.toString(imageURLs.toArray()));
Na záver vypíšeme počet odkazov a obrázkov a ich absolútna url.
Atribúty
public class Jsoup06 { private static String urlString = "http://www.itnetwork.cz"; public static void main(String[] args) throws IOException { Document doc = Jsoup.connect(urlString).get(); Elements links = doc.select("a"); for (Element link : links) { if (link.hasAttr("target")) { if (link.hasText()) { System.out.println(link.text()); // text odkazu System.out.println(link); // celé html odkazu } } } Elements images = doc.select("img"); for (Element image : images) { if (image.hasAttr("alt")) { if (image.attr("alt").length() > 2) { System.out.println(image.attr("alt")); System.out.println(image); } } } } }
Tento kód načíta stránku na zadanom url, nájde všetky odkazy, ktoré majú atribút target a ak má daný odkaz nejaký text, vypíše text a následne celý odkaz. Potom vyhľadá všetky obrázky s atribútom alt a v prípade, že atribút alt má tri a viac znakov, vypíše hodnotu tohto atribútu a neskôr aj celý img element.
Prechádzanie diskusia
public class Jsoup07 { public static void main(String[] args) throws IOException { String urlString = "http://www.novinky.cz/diskuse?id=339381&articleId=/ekonomika/317675-zazracny-pristroj-na-usporu-elektriny-je-podvod-varuje-casopis-dtest.html§ionId=5"; Document doc = Jsoup.connect(urlString).get(); String selectorContributions = "div#contributions"; String selectorContribution = "div.contribution"; //String selectorContribution = "div.msgBoxOut"; Element contributions = doc.select(selectorContributions).first(); //Element contributions = doc.getElementById("contributions"); Elements selectedDivs = contributions.select(selectorContribution); // vypsání vybraných div for (Element div : selectedDivs) { System.out.println(div); } // vypsání textu vybraných div for (Element div : selectedDivs) { System.out.println(div.text()); } // vyhledání elementů v rozsahu jiného elementu String selectorName = "h4.name"; String selectorDate = "div.infoDate span"; String selectorContent = "div.content"; for (Element div : selectedDivs) { Element name = div.select(selectorName).first(); Element date = div.select(selectorDate).first(); Element content = div.select(selectorContent).first(); System.out.println(name.text()); System.out.println(date.text()); System.out.println(content.text()); System.out.println("====================================="); } } }Na načítané url sa nachádza diskusia. Ak sa pozriete do zdrojového kódu stránky, tak zistíte, že oblasť, v ktorej sa nachádzajú komentáre, má id contributions (<div id = "contributions"> oblasť s komentármi </ div>), každý komentár sa nachádza v triede contribution (< div class = "contribution"> komentár </ div>). V každom komentári je uvedený autor (<h4 class = "name"> autor </ h4>), dátum, umiestnený v tagu span, ktorý je v triede infoDate (<div class = "infoDate"> dátum </ span > </ div>) a samotný text príspevku (<div class = "content"> text </ div>). Ak by sme mali byť dôslední, text príspevku je v tagu
</ p> a tento tag je v triede content. Keďže daná trieda nemá iný text, než komentár, nie je táto presnosť potrebná narozdiel od triedy infoDate, ktorá obsahuje okrem dátumu aj odkazy pre hlasovanie (súhlasím, nesúhlasím) a skóre hlasovania.
Element contributions = doc.select(selectorContributions).first();
Hľadáme <div id = "contributions"> (premenná selectorContributions = "div # contributions"). Môžeme použiť aj druhý spôsob
Element contributions = doc.getElementById("contributions");
Elements selectedDivs = contributions.select(selectorContribution);
Vo predtým vybranej oblasti (táto oblasť obsahuje div s id contributions) hľadáme div s triedou contribution (<div class = "contribution">).
String selectorName = "h4.name"; String selectorDate = "div.infoDate span"; String selectorContent = "div.content";
h4.name (<h4 class = "name"> </ h4>)
div.infoDate span (<div class = "infoDate"> </ span> </
div>)
div.content (<div class = "content"> </ div>)
Viac k vyhľadávaniu elementov nájdete na tu. To je všetko. Dúfam, že vám knižnica Jsoup bude na úžitok.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 163x (1.97 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java