9

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

4 回答 4

11

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

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

于 2013-08-18T23:35:47.727 回答
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'])
于 2013-08-18T23:38:19.277 回答
2

如果我理解正确,您正在寻找图像的 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

盾牌 = url_to_image(shield_url)

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

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

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

希望能帮助到你!

于 2018-05-08T14:03:30.310 回答
0

这是gazpacho的完整工作示例:

第 1 步- 导入所有内容并下载 html:

from pathlib import Path
from urllib.request import urlretrieve as download
from gazpacho import Soup

id = 'tt5057054'
url = f"https://www.imdb.com/title/{id}"

soup = Soup.get(url)

第 2 步- 找到图片资源的 src url:

image = (soup
    .find("div", {"id": "title-overview"})
    .find("div", {"class": "poster"})
    .find("img")
    .attrs['src']
)

第 3 步- 将其保存到您的机器:

directory = "images"
Path(directory).mkdir(exist_ok=True)

extension = image.split('.')[-1]
download(image, f"{directory}/{id}.{extension}")
于 2020-10-09T23:51:15.447 回答