Problem: IMDB.com mit Beautiful Soup parsen

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.
stefan3003
User
Beiträge: 17
Registriert: Montag 27. November 2006, 11:39

Problem: IMDB.com mit Beautiful Soup parsen

Beitragvon stefan3003 » Freitag 23. März 2007, 10:27

Hallo,

ich bin gerade dabei meiner DVD-Verwaltung (jaja, mir ist nichts besseres zum experimentieren eingefallen ;) etwas Eigenleben einzuhauchen. Die Idee: Ich lasse einfach einige Felder direkt aus der Datenbank von imdb.com befüllen. Zum parsen des .html bin ich auf Beautiful Soup gestoßen, hat anfänglich auch super funktioniert, doch nun stecke ich fest und hoffe ihr könnt mir weiterhelfen :)

Ich will den Inhalt einiger <div class=info> Tags auslesen und kann nicht rausfinden wie ich das anstellen soll, mein Testcode sieht dzt. so aus:

Code: Alles auswählen

import urllib2, string
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen("http://www.imdb.com/title/tt0078875/")
soup = BeautifulSoup(page)
titleTag = soup.html.head.title
TITLE=(string.split(titleTag.string, "("))[0]   #  TODO: Diese beiden Zeilen zusammenfassen
tmp=(string.split(titleTag.string, "("))[1]     #
RELJAHR=(string.split(tmp, ")"))[0]
print "Titel:", TITLE
print "Erscheinungsdatum:", RELJAHR

tmp=soup.findAll("div", { "class" : "info" })
print tmp[0]


tmp[0] in diesem Fall ist "Release Date:", doch wie komme ich an das
"3 May 1979 (West Germany)" ran (oder bei tmp[1] "Genre" das "Drama") ?

Meine erste Idee war mich da mit readline oder so irgendwie 'runterzuhangeln', doch das erscheint mir irgendwie nicht die sauberste Lösung zu sein :] Weiß jemand von euch Rat ? :)

Vielen Dank,
Stefan
BlackJack

Beitragvon BlackJack » Freitag 23. März 2007, 11:24

Es gibt ein Modul auf SourceForge, das Dir die Arbeit abnimmt:

http://imdbpy.sourceforge.net/

Und man kann die Daten auch in anderen Formaten als HTML bekommen:

http://www.imdb.com/interfaces.html
stefan3003
User
Beiträge: 17
Registriert: Montag 27. November 2006, 11:39

Beitragvon stefan3003 » Freitag 23. März 2007, 11:41

BlackJack hat geschrieben:Es gibt ein Modul auf SourceForge, das Dir die Arbeit abnimmt:

http://imdbpy.sourceforge.net/


Oh. Super. Das schau' ich mir gleich mal an :)

Rein Interesse halber: wie hätte man das mit Beautiful Soup
lösen können ?

Vielen Dank & schönes Wochenende,
Stefan
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 23. März 2007, 16:59

stefan3003 hat geschrieben:Rein Interesse halber: wie hätte man das mit Beautiful Soup lösen können ?

Hässlich runtergehackt:

Code: Alles auswählen

In [1]: from BeautifulSoup import BeautifulSoup
In [2]: import urllib
In [3]: remote_file = urllib.urlopen('http://www.imdb.com/title/tt0078875/')
In [4]: content = remote_file.read()
In [5]: remote_file.close()
In [6]: soup = BeautifulSoup(content)
In [9]: info_divs = soup('div', {'class' : 'info'})
In [21]: info_divs[0].contents[2].splitlines()[1]
Out[21]: u'3 May 1979 (West Germany)'
In [30]: info_divs[1].contents[3].contents[0]
Out[30]: u'Drama'


Kann man natürlich etwas schöner und universeller machen, aber hier hast du zum Beispiel wie man ein bestimmtes div-Element auswählt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
stefan3003
User
Beiträge: 17
Registriert: Montag 27. November 2006, 11:39

Beitragvon stefan3003 » Freitag 23. März 2007, 19:12

Leonidas hat geschrieben:Kann man natürlich etwas schöner und universeller machen, aber hier hast du zum Beispiel wie man ein bestimmtes div-Element auswählt.


Klasse, vielen Dank für die Info :)

Wer ist online?

Mitglieder in diesem Forum: redone