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.
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

Mit BeautifulSoup Text zwischen den > < auslesen.

Beitragvon Treehouse » Montag 26. Mai 2008, 14:49

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
BlackJack

Beitragvon BlackJack » Montag 26. Mai 2008, 15:40

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

Beitragvon Treehouse » Montag 26. Mai 2008, 19:23

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:
Benutzeravatar
tiax
User
Beiträge: 152
Registriert: Samstag 23. Juli 2005, 17:28
Kontaktdaten:

Beitragvon tiax » Montag 26. Mai 2008, 19:48

Bild

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

Beitragvon Treehouse » Montag 26. Mai 2008, 20:09

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.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Beitragvon Zap » Montag 26. Mai 2008, 20:49

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

Beitragvon Treehouse » Mittwoch 28. Mai 2008, 16:22

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Mittwoch 28. Mai 2008, 17:03

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

Beitragvon Treehouse » Mittwoch 28. Mai 2008, 18:22

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
BlackJack

Beitragvon BlackJack » Mittwoch 28. Mai 2008, 19:50

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

Beitragvon Treehouse » Mittwoch 28. Mai 2008, 20:22

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
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

Beitragvon Treehouse » Mittwoch 28. Mai 2008, 20:26

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]