我正在使用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'))
答案 0 :(得分: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
我已将id
更改为film_id
,因为id()
是内置函数,掩盖这些功能是不好的做法。
答案 1 :(得分: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'])
答案 2 :(得分: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']
然后,您需要处理图像。你必须选择。
1st:使用 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_image(shield_url)
第二次使用 scikit-image 库(您可能需要安装):
shield = io.imread('http:' + shield_url)
注意:就在这个特殊的例子中,我需要在开始时添加http:。
希望它有所帮助!
答案 3 :(得分: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网址:
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}")