Seite 1 von 1

Problem: IMDB.com mit Beautiful Soup parsen

Verfasst: Freitag 23. März 2007, 10:27
von stefan3003
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

Verfasst: Freitag 23. März 2007, 11:24
von BlackJack
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

Verfasst: Freitag 23. März 2007, 11:41
von stefan3003
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

Verfasst: Freitag 23. März 2007, 16:59
von Leonidas
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.

Verfasst: Freitag 23. März 2007, 19:12
von stefan3003
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 :)