2013-08-18 7 views
5

Ich benutze BeautifulSoup, um eine HTML-Seite von IMDb zu erhalten, und ich möchte das Posterbild von der Seite extrahieren. Ich habe das Bild basierend auf einem der Attribute, aber ich weiß nicht, wie man die Daten darin extrahiert.Extrahieren von Bildsrc basierend auf Attribut mit BeautifulSoup

Hier ist mein Code:

url = 'http://www.imdb.com/title/tt%s/' % (id) 
soup = BeautifulSoup(urllib2.urlopen(url).read()) 
print("before FOR") 
for src in soup.find(itemprop="image"): 
    print("inside FOR") 
    print(link.get('src')) 

Antwort

8

Sie sind fast da - nur ein paar Fehler. soup.find() ruft das erste übereinstimmende Element ab, nicht eine Liste, sodass Sie nicht darüber iterieren müssen. Sobald Sie das Element erhalten haben, können Sie seine Attribute (wie src) mit Wörterbuch Zugriff erhalten. Hier ist eine überarbeitete Version:

film_id = '0423409' 
url = 'http://www.imdb.com/title/tt%s/' % (film_id) 
soup = BeautifulSoup(urllib2.urlopen(url).read()) 
link = soup.find(itemprop="image") 
print(link["src"]) 
# output: 
http://ia.media-imdb.com/images/M/[email protected]@._V1_SY317_CR0,0,214,317_.jpg 

I id-film_id geändert haben, weil id() eine eingebaute Funktion ist, und es ist eine schlechte Praxis diejenigen zu maskieren.

5

Ich glaube, Ihr Beispiel ist sehr nah. Sie müssen findAll() anstelle von find() verwenden und wenn Sie iterieren, wechseln Sie von src zu link. Im folgenden Beispiel wechselte ich es tag

Dieser Code ist für mich die Arbeit mit BeautifulSoup4:

url = 'http://www.imdb.com/title/tt%s/' % (id,) 
soup = BeautifulSoup(urllib2.urlopen(url).read()) 
print "before FOR" 
for tag in soup.findAll(itemprop="image"): 
    print "inside FOR" 
    print(tag['src']) 
Verwandte Themen