2013-08-18 14 views
5

Używam BeautifulSoup, aby uzyskać stronę HTML z IMDb, i chciałbym wyodrębnić obraz z plakatu ze strony. Mam obraz oparty na jednym z atrybutów, ale nie wiem, jak wyodrębnić dane w nim zawarte.Wyodrębnianie obrazu src na podstawie atrybutu z BeautifulSoup

Oto mój kod:

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

Odpowiedz

8

Jesteś prawie tam - po prostu kilka błędów. soup.find() otrzymuje pierwszy dopasowany element, a nie listę, więc nie trzeba go powtarzać. Po uzyskaniu elementu można uzyskać jego atrybuty (np. src) przy użyciu dostępu do słownika. Oto przerobiona wersja:

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 

Zmieniłem id do film_id, ponieważ id() jest wbudowana funkcja, i to jest złe praktyki w celu zamaskowania tych.

5

Wierzę, że twój przykład jest bardzo bliski. Musisz użyć findAll() zamiast find(), a podczas iteracji przełączasz się z src na link. W poniższym przykładzie przeszedłem ją tag

Ten kod działa dla mnie z 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']) 
Powiązane problemy