2013-08-18 9 views
5

Sto utilizzando BeautifulSoup per ottenere una pagina HTML da IMDb, e vorrei estrarre l'immagine del poster dalla pagina. Ho un'immagine basata su uno degli attributi, ma non so come estrarre i dati al suo interno.Estrazione dell'immagine src in base all'attributo con BeautifulSoup

Ecco il mio codice:

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')) 

risposta

8

Ci siamo quasi - solo un paio di errori. soup.find() ottiene il primo elemento che corrisponde, non un elenco, quindi non è necessario iterarlo su di esso. Una volta ottenuto l'elemento, è possibile ottenere i suoi attributi (come src) utilizzando l'accesso al dizionario. Ecco una versione rielaborata:

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 

ho cambiato id-film_id, perché id() è una funzione built-in, ed è cattiva pratica per mascherare quelli.

5

Credo che il tuo esempio sia molto vicino. È necessario utilizzare findAll() invece di find() e quando si itera, si passa da src a link. Nell'esempio che segue sono passato a tag

Questo codice sta lavorando per me con 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']) 
Problemi correlati