# Welchen HTML Parser soll ich nehmen?



## Fry (17. Sep 2009)

Hallo,

ich habe jetzt schon einige HTML Parser hier im Forum beguckt und bin mir aber beim Sichten der Dokumentation nicht so wirklich schlüssig geworden, welcher denn nun für mein Problem der beste Parser ist. Ich habe in Python mal einen benutzt, der echt schickt war:

```
elements = soup.findAll('td', 'std', onclick=True)
```
Damit hatte ich alle <TD>'s aus der Seite, die als "class" Attribut "std" hatten und in denen noch "onclick" stand. Hat denn schon mal jemand ein ähnliches Problem gelöst?

Also praktisch folgendes Konstrukt möchte ich betrachten, in dem ich den Text "DER_TEXT_INTERESSIERT_MICH" auslesen kann:
<TD CLASS=std onClick="function(386557);">DER_TEXT_INTERESSIERT_MICH</TD>

Alle Ansätze, die ich bis jetzt verfolgt habe, sind alle etwas umfangreicher und nicht so einfach. Deswegen die kurze Frage bevor ich losleg 

Thx
Fry


----------



## musiKk (17. Sep 2009)

Java ist keine dynamische Sprache wie Python, daher werden wahrscheinlich alle Lösungen etwas komplexer sein. Ich habe bisher htmlparser verwendet. Dort kann man per NodeFilter alle Nodes eines HTML-Dokuments suchen, die ein bestimmtes Prädikat erfüllen sollen.


----------



## Fry (17. Sep 2009)

Danke musiKk,

dann werde ich mein Glück mit diesem Parser mal versuchen.

Fry


----------



## Fry (12. Okt 2009)

Hallo,

ich habe das jetzt wie folgt gelöst (für den Fall, dass es noch jemand gebrauchen kann):

```
...
tableFilter = new NodeClassFilter (TableColumn.class);
        
		completeFilter = new AndFilter (
				tableFilter,
                new NodeFilter ()
                {
                    public boolean accept (Node node)
                    {
                    	String text = (node).getText();
                    	return text.contains("CLASS=std onClick=");
                        
                    }
                }
            );
...
```
dann

```
...
parser = new Parser (url);
list = parser.extractAllNodesThatMatch (completeFilter);
...
```
und dann kann man mit

```
...
list.elementAt (i).toPlainTextString()
...
```
auch noch ganz bequem nur auf den Inhalt des </TD>hier der Text</TD> zugreifen ohne die störenden <td> tags 

Gruß
Fry


----------

