使用BeautifulSoup基于属性提取图像src

9 python beautifulsoup html-parsing web-scraping

我正在使用BeautifulSoup从IMDb获取HTML页面,我想从页面中提取海报图像.我有基于其中一个属性的图像,但我不知道如何提取其中的数据.

这是我的代码:

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'))
Run Code Online (Sandbox Code Playgroud)

Zer*_*eus 10

你几乎就在那里 - 只是几个错误.soup.find()获取匹配的第一个元素,而不是列表,因此您不需要迭代它.获得元素后,您可以src使用字典访问获取其属性(如).这是一个返工版本:

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/MV5BMTg2ODMwNTY3NV5BMl5BanBnXkFtZTcwMzczNjEzMQ@@._V1_SY317_CR0,0,214,317_.jpg
Run Code Online (Sandbox Code Playgroud)

我已经改变idfilm_id,因为它id()是一个内置函数,掩盖它们是不好的做法.


Dav*_*ust 5

我相信你的榜样非常接近.你需要使用findAll()而不是find(),当你迭代时,你从src切换到链接.在下面的示例中,我将其切换为tag

这段代码适用于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'])
Run Code Online (Sandbox Code Playgroud)