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

2024-04-26 20:54:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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'))

Tags: 数据代码图像srchttpurlfor属性
3条回答

我相信你的例子很接近。您需要使用findAll()而不是find(),当您迭代时,您将从src切换到link。在下面的示例中,我将其切换为tag

此代码适用于美化组4:

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

如果我理解正确的话,你是在寻找图像的src,在那之后提取它。

首先,您需要找到(使用检查器)HTML中的哪个位置是图像。例如,在我的粒子案例中,我要取消足球队的防护罩,我需要:

m_url = 'http://www.marca.com/futbol/primera/equipos.html'
client = uOpen(m_url) 
page = client.read()
client.close()

page_soup = BS(page, 'html.parser')

teams = page_soup.findAll('li', {'id': 'nombreEquipo'})
for team in teams:
  name = team.h2.text
  shield_url = team.img['src']

然后,你需要处理图像。你必须有选择。

第一:使用numpy:

def url_to_image(url):
    '''
    Función para extraer una imagen de una URL
    '''
    resp = uOpen(url)
    image = np.asarray(bytearray(resp.read()), dtype='uint8')
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)
    return image

shield=url_to_图像(shield_url)

第二次使用scikit image库(可能需要安装):

shield = io.imread('http:' + shield_url)

注意:就在这个特定的示例中,我需要在begging中添加http:。

希望有帮助!

你就快到了-只有几个错误。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

我把id改成了film_id,因为^{}是一个内置函数,屏蔽它们是不好的做法。

相关问题 更多 >