2013-08-18 32 views
5

Tôi đang sử dụng BeautifulSoup để tải trang HTML từ IMDb và tôi muốn trích xuất hình ảnh áp phích từ trang. Tôi đã có hình ảnh dựa trên một trong các thuộc tính, nhưng tôi không biết cách trích xuất dữ liệu bên trong nó.Trích xuất hình ảnh src dựa trên thuộc tính với BeautifulSoup

Dưới đây là mã của tôi:

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

Trả lời

8

Bạn sắp thực hiện - chỉ là một vài sai lầm. soup.find() lấy phần tử đầu tiên khớp, chứ không phải danh sách, do đó bạn không cần lặp lại nó. Một khi bạn đã có các yếu tố, bạn có thể nhận được các thuộc tính của nó (như src) bằng cách sử dụng truy cập từ điển. Dưới đây là một phiên bản làm lại:

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 

Tôi đã thay đổi id-film_id, vì id() là một hàm built-in, và nó là xấu thực hành để che dấu những.

5

Tôi tin rằng ví dụ của bạn rất gần. Bạn cần phải sử dụng findAll() thay vì find() và khi bạn lặp lại, bạn chuyển từ src sang liên kết. Trong ví dụ dưới đây, tôi chuyển nó đến tag

Mã này đang làm việc cho tôi với 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']) 
Các vấn đề liên quan