当您查看任何IMDB图像页面时,电影海报图像的URL格式如下:



我想知道alphaNumeric是如何生成的,很可能是从电影的标题或从IMDB代码中生成的。通过IMDB浏览)用于功夫熊猫:



标题:功夫熊猫

IMDB ID:tt0441773

图像URL:http://ia.media-imdb.com/images/M/MV5BMTIxOTY1NjUyN15BMl5BanBnXkFtZTcwMjMxMDk1MQ@@._V1_SX214_AL_.jpg

杬:MV5BMTIxOTY1NjUyN15BMl5BanBnXkFtZTcwMjMxMDk1MQ
名称:功夫熊猫2 <无线电通信/>
IMDB ID:tt1302011

图像URL:http://ia.media-imdb.com/images/M/MV5BMTg4MTQ3NTI3Nl5BMl5BanBnXkFtZTcwNzEzODQ2NA@@._V1_SX214_AL_.jpg />
字母数字:MV5BMTg4MTQ3NTI3Nl5BMl5BanBnXkFtZTcwNzEzODQ2NA

我已经取得了一些进步,因为字母数字是Base64编码的(t他的第一个变成1 ^ A1219656527 ^ A2 ^ Ajpg ^ Ame702310951),或者至少我很确定基于“ jpg”文本。但是,我不确定第一个^ A和最后一个^ Ame之后的数字是如何生成的。如果有人能找到电影或其IMDB代码与这些编号之间的关系,那就太好了!

评论

1219656527看起来像是日期为2008-08-25 11:28:47的Unix时间戳。其余的都不知道。

@Celelibi不幸的是,如果您第二次执行相同的过程,则日期为2029-08-15 8:01:16。似乎不太可能。

确实,2029年还有点距离。那不知道。

#1 楼

我尝试解码前250个图表中每部电影的“字母数字”字符串。

好像它们替换了填充符号(它们使用'@'而不是'='),但是,一旦我恢复了填充,每个解码后的字符串都具有您之前报告的格式(我将使用逗号,而不是用'^ A'作为字段分隔符):

1, [numeric value], 2, jpg, me + [numeric value]


我无法识别出这些数字字段和电影ID之间的任何关系,但这是一些代码对于愿意尝试的人:

import requests
import re
from lxml.etree import HTML
from matplotlib import pyplot as plt
import numpy

request = requests.get('http://www.imdb.com/chart/top?ref_=nv_ch_250_4')
tree = HTML(request.text)
path = './/*[@id="main"]/div/div[2]/table/tbody/tr/td[@class="posterColumn"]/a'
data = numpy.zeros(shape=(250, 3))
row = 0
for td in tree.findall(path):
    movie_id = re.findall('tt(\d*)/', td.attrib['href'])
    img = re.findall('M/(.*)\._V', td.find('./img').attrib['src'])
    img_decoded = img.pop().replace('@', '=').decode('base64')
    img_field_1 = re.findall('\^A(\d*)\^A', img_decoded)
    img_field_2 = re.findall('me(\d*)', img_decoded)
    data[row] = movie_id.pop(), img_field_1.pop(), img_field_2.pop()
    row += 1

fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax1.scatter(data[:, 0], data[:, 1])  # movie_id vs. img_field_1
ax2.scatter(data[:, 0], data[:, 2])  # movie_id vs. img_field_2
ax1.xaxis.get_major_formatter().set_powerlimits((0, 1))


这是一个小图,显示了两个解码字段与电影ID: