当前位置: 华文问答 > 影视

如何使用爬虫查询哪些电影使用变形宽银幕镜头?

2019-03-05影视

最方便的是直接用现有的数据集。

IMDb 官方发布的有数据集:

数据集的官网链接如下,

(但是官方给出的是简要数据集,似乎不包含题主所说的Technical Spec)。所以这里需要从官方的数据集出发去爬所需要的条目

数据的格式是TSV

可以用excel预览一下

A列是电影的唯一标识ID,每个电影对应唯一一个ID

C列是电影的名字

官方数据集每天更新,所以无需担心数据中不包含新电影

也就是说在这里官方已经提供了一个完整的id集合。

这看起来是一个非常【爬虫友好的网站】,都不用自己抓索引,自己就把所有索引直接给出了。

回到题主所需要的 Technical Spec 栏目

打开某个电影的Technical Spec页面,无需登录,地址栏里面t开头的字段就是ID,改变ID就可以访问不同电影的Technical Spec。

所以这个爬虫的思路非常简单,遍历所有ID,把每个ID下的Technical Spec 页面里的Camera保存下来就OK

这里需要使用urllib来获取网页,然后使用re来正则表达式解析网页找到我们需要的内容。

回到网页按下F12打开开发者模式

查看对应内容是如何组织标签的:

以上面这个电影的ID为例,用正则表达式来提取这几行里的有用信息(正则表达式是一种从字符串中寻找特定特征的字串的方法,具体可以参考Python 正则表达式 | 菜鸟教程):

import urllib.request as urlreq import re id_str = 'tt4154664' x = urlreq . urlopen ( "https://www.imdb.com/title/tt4154664/technical" ) content_url = x . read () . decode ( 'utf-8' ) a = re . search ( r '<td class=\"label\"> Camera </td>.*?</td>' , content_url , re . S ) res = re . sub ( '<td.*?>|</td>|<br>' , '' , a . group ()) print ( res )

代码中前两行引入urllib用于网页请求,引入re用于正则表达式匹配。5-6行请求网页,直接请求下来的网页html是这样的,需要从中提取有用信息

第7行使用re寻找所需要的内容,第八行整理一下,去掉<td>|</td>|<br> 这些标签。

得到的内容应该是题主想要的Camera内容

对于这一条成功的获取了所需要的信息。

接下来就是遍历官方提供的整个大列表,收集所有电影的camera信息,存入一个TSV或者CSV或者whatever。方便搜索就行。

注:

根据IMDb官方条款,使用机器人批量收集信息是违规的(来源: Conditions of Use - IMDb

Robots and Screen Scraping: You may not use data mining, robots, screen scraping, or similar data gathering and extraction tools on this site, except with our express written consent as noted below.

所以这里不展开讲如何改变user_agent,调节抓取间隔,使用代理,以及分布式抓取的方法

几个电影相关的数据集

(IMDb的API许可非常的贵,爬虫抓全站又违规,所以这里列出几个电影相关的现成数据集)

比较有名的是Kaggle里的几个:

IMDB 5000 Movie Dataset

IMDB Movies Dataset

IMDb官方提供的乞丐版也算上吧: - IMDb,https:// datasets.imdbws.com/

OMDb,一个提供开放API的电影数据库 The Open Movie Database

=========

Pjer内容分类:

精选 射电 编程 科研&工具 太阳物理