ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
10583
10583
EMPFEHLEN
-
29.04.05 12:54 #1
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
/* * Created on 29.04.2005@11:54:21 by Darimont * * TODO Licence info */ package de.tutorials; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import javax.swing.text.html.HTML; import javax.swing.text.html.HTMLDocument; import javax.swing.text.html.HTMLEditorKit; /** * @author Darimont * * TODO Explain me */ public class LinkExtractor { public static void main(String[] args) throws Exception { URL url = new URL("file:/c:/tutorials.htm"); URLConnection con = url.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(con .getInputStream())); HTMLEditorKit editorKit = new HTMLEditorKit(); HTMLDocument htmlDoc = new HTMLDocument(); htmlDoc.putProperty("IgnoreCharsetDirective", Boolean.TRUE); editorKit.read(br, htmlDoc, 0); HTMLDocument.Iterator iter = htmlDoc.getIterator(HTML.Tag.A); while (iter.isValid()) { System.out.println(iter.getAttributes().getAttribute( HTML.Attribute.HREF)); iter.next(); } } }
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
03.07.05 12:16 #2Folliot Tutorials.de Gastzugang
Hallo Tom,
ein schönes Programmfragment, könntest Du es allerdings um ein paar Erläuterungen für Java Neulinge erweitern?
Zunächst einmal verstehe ich nicht, warum das Programm bei mir zwar kompiliert aber dann nur eine execption in der Klasse main ausgibt: "Exception in thread "main" java.lang.NoClassDefFoundError: LinkExtractor...
Ich meine es wird gar keine Datei Klassendatei namens LinkExtractor.class angelegt...
Wo liegt mein Fehler?
Vielen Dank für Deine Hilfe, Grüsse Folliot
-
Wenn ich den Tag von "A" auf etwas anderes zB "P" ändere:
erhalte ich nur noch eine "NullPointerException"!Code :1
HTMLDocument.Iterator iter = htmlDoc.getIterator(HTML.Tag.P);
-
15.01.08 12:55 #4
- Registriert seit
- Jan 2008
- Beiträge
- 1
Hallo,
das Beispiel funktioniert bei mir für "a href" wunderbar. Wenn ich es aber umstelle auf bspw. "img src" dann wird nichts mehr gefunden.
Hier mein der minimal modifizierte Code, das Eingabedokument und die Ausgabe:
Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
public static void main( String[] args ) throws Exception { URL url = new URL( "file:/c:/tutorials.htm" ); URLConnection con = url.openConnection(); BufferedReader br = new BufferedReader( new InputStreamReader( con.getInputStream() ) ); HTMLEditorKit editorKit = new HTMLEditorKit(); HTMLDocument htmlDoc = new HTMLDocument(); htmlDoc.putProperty( "IgnoreCharsetDirective", Boolean.TRUE ); editorKit.read( br, htmlDoc, 0 ); {// IMAGES HTMLDocument.Iterator iter = htmlDoc.getIterator( HTML.Tag.IMG ); while( iter.isValid() ) { System.out.println( "img: " + iter.getAttributes().getAttribute( HTML.Attribute.SRC ) ); iter.next(); } } {// LINKS HTMLDocument.Iterator iter = htmlDoc.getIterator( HTML.Tag.A ); while( iter.isValid() ) { System.out.println( "a: " + iter.getAttributes().getAttribute( HTML.Attribute.HREF ) ); iter.next(); } } }
Eingabedokument (mit 6x a href und 1 x img src):
und hier die Ausgabe ohne IMG:HTML-Code:<html> <head> </head> <body> <img src="hugo.gif">x</img> <a href="bla1"/> <a href = "bla2" >XXX</a> <a href="bla3"><p>sdfsdfsdf</p>XX1</a> <p>fhdsfksdhka<b>fdfdfdf</p> <a href="bla4">XXX2</a> <a href="bla5">XXX3</a> <img src="hugo.gif">x</img> dfdsfdfs dfsdf s<a href="bla6">XXX4</a> df </body </html>
Code :1 2 3 4 5 6
a: bla1 a: bla2 a: bla3 a: bla4 a: bla5 a: bla6
Kann da jemand aufklären warum das für a-Tags geht und für p (wie beim Vorposter) und img dann nicht? Ist doch eigentlich kein Unterschied?
Ciao
Thomas Groetzner
-
15.01.08 13:10 #5
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
/* * Created on 29.04.2005@11:54:21 by Darimont * * TODO Licence info */ package de.tutorials; import java.io.FileInputStream; import javax.swing.text.html.HTML; import javax.swing.text.html.HTMLDocument; import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.HTML.Tag; /** * @author Darimont * * TODO Explain me */ public class LinkExtractor { public static void main(String[] args) throws Exception { HTMLEditorKit editorKit = new HTMLEditorKit(); HTMLDocument htmlDoc = new HTMLDocument(); htmlDoc.putProperty("IgnoreCharsetDirective", Boolean.TRUE); editorKit.read(new FileInputStream("c:/tutorials.html"), htmlDoc, 0); HTMLDocument.Iterator aTagIterator = htmlDoc.getIterator(HTML.Tag.A); while (aTagIterator.isValid()) { System.out.println(aTagIterator.getAttributes().getAttribute( HTML.Attribute.HREF)); aTagIterator.next(); } HTMLDocument.Iterator imgTagIterator = htmlDoc.getIterator(HTML.Tag.IMG); while (imgTagIterator.isValid()) { System.out.println(imgTagIterator.getAttributes().getAttribute( HTML.Attribute.SRC)); imgTagIterator.next(); } } }
Ausgabe:
Code :1 2 3 4 5 6 7 8
bla1 bla2 bla3 bla4 bla5 bla6 hugo.gif hugo.gif
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
15.01.08 14:24 #6
- Registriert seit
- Jan 2008
- Beiträge
- 1
Hallo Tom,
an dem Code von Dir sind ja nur die ersten Paar Zeilen (Lesen file/Lesen Stream) anders. Übersetzte ich das bei mir kommt auch der Output ohne die img-Tags raus.
Ich hab aber rausgefunden woran es liegt: das Problem steht und fällt mit der verwendeten JDK-Version. Der von mir gepostete Quellcode (und der von Dir auch) liefert:
mit j2sdk1.4.2_06 den fehlerhaften Output ohne die img-Tags
mit j2sdk1.6.0_01 neu übersetzt den korrekten Output incl. der img-Tags!
Ich hatte mit 1.4.2 nämlich auch keine
- table
- div
- ...
Tags bekommen (in den Fällen sogar null pointer exception, bei img einen leeren Iterator). Nur die a-Tags gingen komischerweise problemlos. Dann habe ich Eclipse auf 1.6 umgestellt und schon ging es. Schade nur dass ich in meiner Umgebung kein 1.6 verwenden darf. Dann parse ich eben doch selbst mit Regular Expressions.
Ciao und danke
Thomas Groetzner
-
Ich hätte eine Frage zum HTMLEditorKit bzw. den Quelltexten.
Ist es auch möglich, sich nicht nur die Attribute (name=..., value=... usw.) von HTML-Tags ausgeben zu lassen, sondern auch das, was dahinter/zwischendrin steht?
Also aus
würde ich gerne "Hallo Welt!" extrahieren.Code :1
<div>Hallo Welt!</div>
Vielen Dank!
-
-
Hi. Dazu hätte ich evtl. eine Lösung für euch.Zitat:
Zitat von Fulk http://www.tutorials.de/forum/clear.gif
Ich hätte eine Frage zum HTMLEditorKit bzw. den Quelltexten.
Ist es auch möglich, sich nicht nur die Attribute (name=..., value=... usw.) von HTML-Tags ausgeben zu lassen, sondern auch das, was dahinter/zwischendrin steht?
Also aus
Code: <div>Hallo Welt!</div>
würde ich gerne "Hallo Welt!" extrahieren.
Vielen Dank!
Hi,
ich habe die gleiche Frage wie Du. Hast Du schon eine Lösung für dein Problem?
Danke. Criss.
Hier wollte ich den Text ausgeben der "Fett" geschrieben wurde.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
int length; String text; HTMLEditorKit editorKit = new HTMLEditorKit(); HTMLDocument htmlDoc = new HTMLDocument(); htmlDoc.putProperty("IgnoreCharsetDirective",Boolean.TRUE); editorKit.read(new FileInputStream("c:/tutorials.html"), htmlDoc, 0); HTMLDocument.Iterator iter = htmlDoc.getIterator(HTML.Tag.B); while (iter.isValid()) { length = iter.getEndOffset()-iter.getStartOffset(); text = htmlDoc.getText(iter.getStartOffset(), length); System.out.println(text); iter.next(); }
Mit dem "length = iter.getEndOffset()-iter.getStartOffset();" bekommt ihr eure Satzlänge, die zwischen den Tags <b></b>steht, heraus.
Nun müsst ihr nur noch "htmlDoc.getText(iter.getStartOffset(), length);" aufrufen.
Hoffe ich konnte euch weiterhelfen
Alternativ Lösungen gern gesehen.
Gruß MikeGeändert von pelewee (23.12.08 um 14:46 Uhr)
-
Das ganze Funktioniert bei mir leider nur in einer IDE (netBeans / Eclipse), wenn ich das aber in einer Konsole (Linux) starte, bekomme ich irgendwann immer eine EOFException...
Die ganze Fehlermeldung:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION couldn't parse: 0 6px couldn't parse: 0 24px 0 6px couldn't parse: 0 6px 0 24px Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Implement parseAny for FUNCTION Exception in thread "main" java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(libgcj.so.90) at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56) Caused by: gnu.javax.swing.text.html.parser.support.low.ParseException: IO Exception at gnu.javax.swing.text.html.parser.support.low.ReaderTokenizer.getTokenAhead(libgcj.so.90) at gnu.javax.swing.text.html.parser.support.Parser.error(libgcj.so.90) at gnu.javax.swing.text.html.parser.support.Parser.error(libgcj.so.90) at gnu.javax.swing.text.html.parser.support.Parser.parse(libgcj.so.90) at gnu.javax.swing.text.html.parser.GnuParserDelegator.parse(libgcj.so.90) at javax.swing.text.html.HTMLEditorKit.read(libgcj.so.90) at SEOSearch.getBacklinkSites(SEOSearch.java:85) at SEOSearch.main(SEOSearch.java:132) at java.lang.reflect.Method.invoke(libgcj.so.90) ...1 more Caused by: java.io.EOFException: Early EOF in GZIP footer at java.util.zip.GZIPInputStream.readFooter(libgcj.so.90) at java.util.zip.GZIPInputStream.read(libgcj.so.90) at java.io.BufferedInputStream.refill(libgcj.so.90) at java.io.InputStreamReader.refill(libgcj.so.90) at java.io.InputStreamReader.read(libgcj.so.90) at java.io.BufferedReader.fill(libgcj.so.90) at java.io.BufferedReader.read(libgcj.so.90) at gnu.javax.swing.text.html.parser.support.low.ReaderTokenizer.readToken(libgcj.so.90) at gnu.javax.swing.text.html.parser.support.low.ReaderTokenizer.read(libgcj.so.90) at gnu.javax.swing.text.html.parser.support.low.ReaderTokenizer.getTokenAhead(libgcj.so.90)
Hintergrund warum ich sowas eigentlich brauche ist der, das ich für meinen Job ein Tool schreiben soll, mit dem man verschiedene Seiten nach einem definierten Link durchsucht.
Wenn jemand meint, die Idee das über den HTMLEditorKit ohne Swing zu machen sei suboptimal, wie könnte man das evtl. anders machen?
Seite zeilenweise streamen und dann innerhalb der Zeilen nach dem Link suchen?
Danke im Voraus für evtl. Antworten.
-
11.08.09 09:16 #11
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
lass die Anwendung mal mit einer normalen JVM laufen und nicht mit gcj...
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
hmpf...ok, ich gleb mir heute das Blind-Flag an die Stirn....
DANKE
-
08.02.10 16:39 #13Onkel Dirk Tutorials.de Gastzugang
Hallo,
ich lese immer fleißig mit, habe aber auch noch eine Frage.
Wie kann ich den herausfinden ob der Link noch Attribute rel="nofollow" oder styles hat?
Und gibt es eine leicht verständliche Anleitung vom HTMLEditorKit für Anfänger wie mich?
Gruß
Onkel Dirk
Ähnliche Themen
-
Anzahl bestimmter Elemente eines Dokuments
Von Arndtinho im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 19.07.07, 08:17 -
Inhalt eines Dokuments verschicken (mit Formatierung)
Von XsilentX im Forum .NET Web und KommunikationAntworten: 6Letzter Beitrag: 24.03.06, 14:48 -
Mit Delphiprogramm alle Links aus einer HTML-Datei auselen, wie?
Von radar im Forum Delphi, Kylix, PascalAntworten: 0Letzter Beitrag: 19.12.04, 22:16 -
Druck eines pdf-Dokuments
Von nikek im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 24.06.04, 09:28 -
Alle Inhalte eines Frames (Links,Flashmenüs,..) im Mainframe öffnen...WIE?
Von Hexenwind im Forum HTML-EditorenAntworten: 6Letzter Beitrag: 13.03.02, 08:41






Zitieren
Login





