# Attribute aus HTML Tags auslesen



## Cyborg (18. Jan 2012)

Guten Abend,

ich versuche mich gerade daran aus einer externen Page alle Inhalte des "src"-Attributs von "img"-Tags auszulesen.

Beim googlen bin ich über den jsoup parser gestolpert.
Dieser liefert mir mit folgender Codezeile:


```
Jsoup.parse(new URL("http://www.ebay.de, 100000).select("img").attr("src");
```

aber leider nur die erste Image-URL.

In der Dokumentation finde ich leider keine passende Methode, die mir ALLE "src"-Attribute zurückliefert.

Hatte mal jemand ein ähnliches Problem und kann mir einen Tipp geben ?


----------



## irgendjemand (18. Jan 2012)

mal davon abgesehen das deine zeile da nicht ganz stimmt *vllt nur flüchtigkeitsfehler* steht in der doc das Elemtens.attr(String) nur das erste treffende element returned


> Get an attribute value from the first matched element that has the attribute


da Elements aber eine List<?> ist kannst du über diese iterieren in dem du dir mit Elements.iterator() ein Iterator<Element> objekt holst ...
dort hast du dan erstmal alle <img> - tags des gesamten dokumentes ...

diese gehst du mit einer normalen while() durch

org.jsoup.nodes.Element erbt von org.jsoup.nodes.Node die methode attr(String) welche dir dann den wert des attributes returned ...

mit ein bisschen hintergrundwissen der standard-api und dem genauen lesen der entsprechenden lib-doc bekommt man sowas raus


----------



## irgendjemand (18. Jan 2012)

so .. hab mir mal die mühe für dich gemacht mit hilfe der doc was zusammen zu bauen ...
ich hab dabei mal alle klassen explizit angegeben um konflikte mit SE-klasse zu vermeiden

```
URL url="URL"; //URL der seite
int timeout=1000; //timeout
String tag="TAG"; //gewünschtes TAG
String attribute="ATRIBUTE"; //gewünschtes ATTRIBUT
org.jsoup.nodes.Document document=org.jsoup.Jsoup.parse(url, timeout);
org.jsoup.select.Elements elements=document.select(tag);
java.util.Iterator<org.jsoup.nodes.Element> iterator=elements.iterator();
while(iterator.hasMore())
{
	org.jsoup.nodes.Element element=iterator.next();
	String value=element.attr(attribute);
	//weiterverarbeitung von value
}
```
in zeile 12 kannst du dann mit der value des attributes sonst was machen ... z.b. in eine weitere ArrayList<String> packen und daraus dann das hier als methode machen

```
public ArrayList<String> getAttributeValues(URL url, int timeout, String tag, String attribute)
{
	ArrayList<String> list=new java.util.ArrayList<String>();
	org.jsoup.nodes.Document document=org.jsoup.Jsoup.parse(url, timeout);
	org.jsoup.select.Elements elements=document.select(tag);
	java.util.Iterator<org.jsoup.nodes.Element> iterator=elements.iterator();
	while(iterator.hasMore())
	{
		org.jsoup.nodes.Element element=iterator.next();
		String value=element.attr(attribute);
		list.add(value);
	}
	return list;
}
```
das sollte in ungefähr das sein was du vorhast ...
über die returnte ArrayList kannst du dann wiederum mit Iterator<String> iterieren und dir die einzelnen werte holen ...
etwaige Exceptions musst du noch selbst behandeln *oder weiter werfen*


----------



## Cyborg (18. Jan 2012)

boah, klasse. Vielen Dank


----------



## irgendjemand (19. Jan 2012)

wie gesagt : DOC LESEN ... hat schon bei vielen die probleme gelöst ...
btw : da die lib-doc zur 5.0er SE gelinkt wurde hättest du auch dort entsprechend zu den SE-klassen hilfe gefunden ...

aber gerade sowas wie List<?> was hier in deinem fall von nöten ist zählt eigentlich zu grundlagen ...


----------



## Cyborg (19. Jan 2012)

Jop, du hast recht.
Es war wohl gestern schon zu spät für sowas.
Das nächste Mal gucke ich genauer hin.


----------



## irgendjemand (19. Jan 2012)

naja kein problem ... hoffe nur was ich da so aus der doc zusammengebaut habe funktioniert auch wie gewünscht ...
eigentlich bin ich die doc stück für stück durchgegangen ... angefangen beim static Jsoup.parse(URL) und mich dann von dort aus vorgearbeitet ... geguckt welche methoden was als parameter erwarten und zurückliefern und wie man sinnvoll durch mehrere objekte gehen kann ...
das es dabei eine cast-klasse gibt welche List<?> als grundlagen-struktur hat hat das ganze natürlich vereinfacht


----------

