160 likes | 286 Views
Web Mining Übung Jobo und DOM. Wintersemester 2006/2007 Universität Hildesheim. Thomas Mandl Information swissenschaft Universität Hildesheim mandl@uni-hildesheim.de. Web Crawling mit Jobo. Jobo open source Java Crawler Start aus Eclipse Bedienung per GUI als download Manager Struktur
E N D
Web MiningÜbung Jobo und DOM Wintersemester 2006/2007 Universität Hildesheim Thomas Mandl InformationswissenschaftUniversität Hildesheim mandl@uni-hildesheim.de
Web Crawling mit Jobo • Jobo • open source Java Crawler • Start aus Eclipse • Bedienung per GUI als download Manager • Struktur • net.matuschek.examples.LogUrl Start von der Kommandozeile • net.matuschek.jobo.Swing... Klassen für GUI
Struktur Jobo net.matuschek.http.HttpDocManager processDocument(HttpDoc doc) net.matuschek.Http.HttpDocument • http Header • getURL() net.matuschek.Spider.WebRobot • Crawling Logik • HttpDocManager als Eigenschaft • work() net.matuschek.Html.HtmlDocument • getLinks() • getElements (String) • Strukturiertes Modell (DOM) aus Seite wird erstellt
Aufgabe HTTPDokument • Ausgabe der gefundenen URLs und Header • Ausgangspunkt • Applikation net.matuschek.examples.LogUrl Start von der Kommandozeile • Benutzt DocumentManager URLLogger • Im DocumentManager Änderungen einfügen • Z.B. wr.write(httpDoc.getContent().length + " ");wr.write(httpDoc.getHttpHeaders().toString());
HTMLDokument • Analyse von HTML Eigenschaften in einem HTTPDocumentManager • Wie viele Links enthalten die Seiten? • Wie viele Tabellen enthalten die Seiten? if (httpDoc.isHTML()) { HtmlDocument htmlDoc = new HtmlDocument(httpDoc.getURL(),new String (httpDoc.getContent())); wr.write(httpDoc.getURL().toString() + " "); String s = " " + htmlDoc.getLinks().size(); wr.write(s); s = " " + htmlDoc.getElements ("table").size(); wr.write(s); System.out.println (htmlDoc.getElements ("table").size() + " "); System.out.println (new String (httpDoc.getContent()));
Exkurs: Document Object Model • HTML-Seite • Browser-Ansicht • HTML Code • DOM • DOM • „standardisiertes Objektmodell und API fuer die Verarbeitung von XML- HTML- und CSS-Dokumenten.“ • „Satz von Schnittstellen, der ein Dokument in einer Baumstruktur darstellt. „ http://paris.cs.uni-magdeburg.de/lehre/sommer-02/pro-xml/rud_s.pdf
Exkurs: Document Object Model • Interfaces • Document – oberster Knoten • Element, • Attr - kann Kinder vom Typ Text oder EntityReference haben. • Funktionen • getNodeName () • getNodeValue () • getChildNodes () • Tidy Parser erzeugt in Jobo für uns schon das DOM in einem HTMLDocument
Durchlaufen von Elementen Iterator it = ( doc.getRootElement().getChildren()).iterator(); int i = 0; while( it.hasNext()) { Element current = ( Element ) it.next(); Betrachten von Elementen Element el = (Element)links.elementAt(i); if (el.getNodeName().equalsIgnoreCase ("a") ) el.getFirstChild().getNodeValue ());
DOM in Jobo • Erzeugen von Vektoren mit bestimmten Elementen Vector links = htmlDoc.getLinks(); Vector tables =htmlDoc.getElements("tables"); Vector titles = new Vector(); extractElements(getDomDoc().getDocumentElement() , "title", titles);
DOM in Jobo • Zugriff auf Knoten (Elemente) if (titles.size() == 0 ) Element e = (Element)titles.elementAt(0); Vector links = getLinks(); for (int l=0; l<links.size() ;l++) { URL tempUrl =(URL)links.elementAt(l); if (tempUrl.getFile().endsWith("pdf")
HTMLDokument • Auslesen der Eigenschaften • Welchen Titel hat die Seite? if (titles.size() != 0 ) { try { Element e = (Element)titles.elementAt(0); if (e.getFirstChild() != null) s = e.getFirstChild().getNodeValue (); wr.write(" " + s); } catch (Exception e) { ... }
Ergebnis • http://www.matuschek.net/blog/ 143 2 Blog 0 • http://www.matuschek.net/sitemap/ 205 1 Sitemap 0 • http://www.matuschek.net/search/ 15 2 Suche 0 • http://www.matuschek.net/impressum/ 16 1 Impressum 0 • http://www.matuschek.net/travel/ 45 1 Reisen 0 • http://www.matuschek.net/freizeit/ 24 1 Freizeit 0
HTMLDokument • Analyse von Links • Wohin führen die Links ? • Wie lange sind Link-Labels in verschiedenen Seiten? • Hinzufügen neuer Funktionen in HtmlDocument • getTitle () • getExternalLinks ()