Mit BeautifulSoup Text zwischen den > < auslesen.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

Hallo zusammen,

ich versuche gerade aus einer HTML Seite den Text der zwischen den > < geschrieben ist auszulesen. Nur leider komme ich nicht wirklich voran. Könnte mir jemand einen Tip geben wie man diesen Parsen könnte?

Also z.b :

<td><span class="bold">Diesen Text will ich haben</span>

Soweit ich das richtig verstanden habe ist BeautifulSoup dafür wie geschaffen nur leider verstehe ich nicht ganz wie ich damit umgehen soll.

Gruß

Treehouse
[i]Jabber IM: Treehouse@jabjab.de[/i]
BlackJack

Code: Alles auswählen

In [136]: soup
Out[136]: <td><span class="bold">Diesen Text will ich haben</span></td>

In [137]: soup(text=True)
Out[137]: [u'Diesen Text will ich haben']
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

Hallo,

erst mal danke für deine Antwort. Aber leider verstehe ich jetzt nicht wirklich was du mir damit sagen willst. :oops:

Könntest du das mir vielleicht ein einem Stückchen Code zeigen? :roll:
[i]Jabber IM: Treehouse@jabjab.de[/i]
Benutzeravatar
tiax
User
Beiträge: 152
Registriert: Samstag 23. Juli 2005, 17:28
Kontaktdaten:

Bild

Hast du denn ein konkretes Verständnisproblem, bei dem man weiterhelfen könnte?
Ne invoces expellere non possis
[url=xmpp://florian@florianheinle.de]xmpp:florian@florianheinle.de[/url]
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

Sagen wir es mal so hätte ich den CODE verstanden würde ich wohl nicht mehr nachfragen. Aber mach doch bitte noch ein paar Screenshots dann hast du was zu tun.
[i]Jabber IM: Treehouse@jabjab.de[/i]
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

guck dir die Doku einfach noch ein wenig an oder teste dich durch...

Code: Alles auswählen

In [15]: html = '<td><span class="bold">Diesen Text will ich haben</span></td>'

In [16]: soup = BeautifulSoup(html)

In [17]: soup(text=True)
Out[17]: [u'Diesen Text will ich haben']

In [18]: soup("td")
Out[18]: [<td><span class="bold">Diesen Text will ich haben</span></td>]

In [19]: soup("span")
Out[19]: [<span class="bold">Diesen Text will ich haben</span>]

In [20]:
Und hier mit urlopen und retrieve

Code: Alles auswählen

In [22]: from BeautifulSoup import BeautifulSoup

In [23]: from urllib import urlopen, urlretrieve

In [24]: url = "http://www.google.de"

In [25]: html = urlopen(url).read()

In [26]: soup = BeautifulSoup(html)

In [27]: soup("img")
Out[27]: [<img alt="Google" height="110" src="/intl/de_de/images/logo.gif" width="301" />]
In [28]: img = soup("img")[0]
In [29]: img.get("src")
Out[29]: u'/intl/de_de/images/logo.gif'
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

So erst mal danke für eure Antworten. Ich hatte leider sehr viel zu tun die letzten Tage so das ich jetzt erst dazu komme zu Antworten.

Zum Thema, ich habe das jetzt soweit verstanden aber mein Problem liegt darin das ich ja nicht alle Texte aus dem HTML Code haben will, sondern nur bestimmte. Ich suche so nach den relevanten Teilen.

Code: Alles auswählen

	names = soup.findAll('span', {"class": "bold"})
	
	for i, name in enumerate(names):
		print i , name
So nun bekomme ich das was ich haben will. Nämlich alle Zeilen vom Aufbau wie oben beschrieben. Und aus diesen will ich jetzt nur den Text haben. Und damit habe ich Schwierigkeiten.

Gruß

Treehouse
[i]Jabber IM: Treehouse@jabjab.de[/i]
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Ohne die BeautifulSoup-API näher zu kennen, würde ich darauf tippen, dass dein "name" wiederum ein Soup-Objekt ist und deshalb der Text mit

Code: Alles auswählen

name(text=True)
extrahiert werden kann.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

birkenfeld hat geschrieben:Ohne die BeautifulSoup-API näher zu kennen, würde ich darauf tippen, dass dein "name" wiederum ein Soup-Objekt ist und deshalb der Text mit

Code: Alles auswählen

name(text=True)
extrahiert werden kann.
Hallo birkenfeld,

genau das habe ich auch gedacht aber leider ist dies nicht der Fall. Wenn ich das so mache bekomme ich eine Fehlermeldung.

Gruß

Treehouse
[i]Jabber IM: Treehouse@jabjab.de[/i]
BlackJack

Wow eine Fehlermeldung. Es wäre hilfreich, wenn Du auch verraten würdest *welche*.
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

So hier ist sie:

Traceback (most recent call last):
File "soup.py", line 41, in <module>
if __name__ == '__main__': main()
File "soup.py", line 34, in main
names(text=True)
TypeError: 'ResultSet' object is not callable


Gruß

Treehouse
[i]Jabber IM: Treehouse@jabjab.de[/i]
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

Stop Stop Stop.............................

Ich Esel habe das falsche Objekt angesprochen. Ich habe das mit "names" versucht und nicht mit "name" in der Schleife. Jetzt gehts !!!!!!!!

Ich danke allen die geholfen haben.

Gruß

Treehouse
[i]Jabber IM: Treehouse@jabjab.de[/i]
Antworten