IMDb(即互联网电影数据库)是一个流行的在线中心,其中包含有关电影、电视节目等的详细信息。随着超过 17.86万部电影、13.14万条人类记录、83万注册用户,这是一个巨大的数据库。将其视为一个巨大的图书馆,您可以在其中探索电影、演员、导演和琐事。无论您是电影爱好者还是研究人员,IMDb 都是分析数字内容的首选来源。它是轻松抓取数据的理想场所,为任何对娱乐感兴趣的人提供有价值的见解。

IMDb 或互联网电影数据库

在本教程中,我们将探索使用 Crawlbase 抓取 API 和 JavaScript 从 IMDb 抓取电影数据。使用这些工具,我们可以轻松抓取电影数据,例如电影标题、评级、发行日期、时长、演员、工作人员、故事情节、类型等。揭开 IMDb 的秘密变得简单,让您为您的电影之旅收集全面的信息。与我们一起畅游数字景观,使用 Crawlbase 爬取 API 和 JavaScript 来抓取并揭示其中丰富的细节 IMDb 庞大的数据库.

目录

为什么要抓取 IMDb 电影数据

在数字时代,抓取 IMDb 电影数据带来了许多好处,为电影爱好者、研究人员和内容创作者释放了见解和可能性。这一过程有效地提供了有价值的信息,使用户能够轻松探索电影世界,发现电影领域的趋势、偏好和新机会。

  1. 高效数据检索自动化

以编程方式抓取 IMDb 数据提供了一个关键优势——自动化。这意味着您可以自动获取电影详细信息,而无需手动收集数据。这就像有一个不知疲倦的助手,不知疲倦地收集信息,为您节省宝贵的时间和精力。

  1. 实时更新最新资讯

以编程方式访问 IMDb 的一大好处是能够接收实时更新。无论是新上映的电影还是最新的收视率,抓取都可以让您掌握不断变化的电影格局的脉搏。保持您的数据新鲜且最新,无需任何手动干预。

  1. 根据您的需求进行定制

编程访问提供了定制数据检索过程的灵活性。想要了解特定类型、发行年份或其他标准的信息吗?通过抓取,您可以根据自己的喜好定制流程,创建与您的兴趣或研究目标完美契合的个性化数据集。

  1. 综合数据库的内容聚合

爬取的 IMDb 数据在内容聚合中找到了实际应用。通过构建电影详细信息的综合数据库,您可以帮助创建服务,为用户提供所有与电影相关的查询的一站式服务。它是将大量信息汇集到一个有凝聚力且易于访问的资源中。

  1. 明智决策的洞察和分析

分析 IMDb 数据为获得有价值的见解打开了大门。识别流行类型的趋势,了解演员和导演对收视率和票房表现的影响,并发现有助于电影成功或失败的模式。这些见解使电影制作人、内容创作者和研究人员能够在动态的电影世界中做出明智的决策。

IMDb 数据结构

IMDb 的综合数据结构是电影爱好者、研究人员和内容创作者寻求深入了解电影世界的支柱。

  • 电影名称和基础知识:

    IMDb 封装了基本细节,从电影标题、发行日期和持续时间开始。这些基础信息为用户提供了浏览广阔电影景观的快速概览。

  • 收视率和观众反馈:

    IMDb 的突出特点之一是其评级系统。用户可以探索观众收视率,从而立即衡量电影的受欢迎程度和接受程度。

  • 演员和工作人员名单:

    为了更深入地研究,IMDb 对为电影创作做出贡献的个人进行了细致的分类。演员名单突出了演员的角色,而工作人员的详细信息则包括导演、编剧、制片人等,让您可以全面了解幕后人才。

  • 故事情节和梗概:

    对于那些想要了解电影叙事的人来说,IMDb 提供了简洁的故事情节和概要。这个功能对于对剧情感兴趣的用户来说是一个宝贵的资源,但又不会透露太多。

  • 类型分类:

    类型在电影分类中起着关键作用。 IMDb 的数据结构可确保准确的类型分类,帮助用户发现符合其喜好的电影。

  • 其他细节和琐事:

    IMDb 超越了基础知识,提供了琐事、错误以及丰富用户体验的其他细节。这些花絮提供了对电影制作过程的有趣见解,并提高了整体参与度。

  • 奖项和认可:

    为了全面了解电影的好评情况,IMDb 提供了有关获奖或提名的信息。本节旨在表彰电影及其贡献者获得的行业认可。

先决条件

在开始编码之前,请确保准备好以下东西:

  • 您计算机上的 Node.js:
    Node.js 是一个可让您在计算机上运行 JavaScript 的工具。这对于运行我们要创建的网页抓取脚本非常重要。从 Node.js 官方网站下载并安装 Node.js。

  • JavaScript 的基本理解:
    由于我们使用 JavaScript 进行网页抓取,因此了解该语言的基础知识非常重要。这包括理解变量、函数、循环和基本 DOM 操作。如果您是 JavaScript 新手,请查看 Mozilla Developer Network (MDN) 或 W3Schools 等网站上的介绍性教程或文档。

  • Crawlbase API 令牌:
    我们将使用 Crawlbase 爬取 API 以实现高效的网页抓取。需要 API 令牌来验证您的请求。转到 Crawlbase 网站,创建一个帐户,然后在帐户设置中找到您的 API 令牌。这些令牌充当解锁 Crawling API 功能的密钥。

如何抓取 IMDb

让我们为 JavaScript 代码准备好工具。您需要执行以下操作:

  1. 创建项目文件夹:
    打开您的终端并输入 mkdir imdb_scraper 创建一个新的项目文件夹。

mkdir imdb_scraper

  1. 导航到项目文件夹:
    Type cd imdb_scraper 进入新文件夹并更轻松地管理项目文件。

cd imdb_scraper

  1. 创建 JavaScript 文件:
    Type touch scraper.js 创建一个名为 scraper.js 的新文件(如果需要,您可以选择其他名称)。

touch scraper.js

  1. 安装 Crawlbase 包:
    Type npm install crawlbase 将 Crawlbase 工具添加到您的项目中。这个工具很重要,因为它可以帮助您与 Crawlbase Crawling API 进行通信,从而更轻松地从 IMDb 网站收集信息。

npm install crawlbase

通过执行这些步骤,您就可以为 IMDb 抓取项目做好一切准备。您将拥有一个专用文件夹、一个用于代码的 JavaScript 文件以及用于组织和高效抓取所需的 Crawlbase 工具。

获取 HTML 内容

获取 IMDb 电影页面 HTML

现在您已经安装了 API 凭据和用于网页抓取的 Node.js 库,让我们开始处理“scraper.js”文件。选择您想要从中抓取数据的 IMDb 电影 - 在此示例中,我们重点关注 肖申克的救赎 (1994)。在“scraper.js”文件中,使用 Node.js 和 fs 库从所选 IMDb 电影页面中提取数据。请记住将代码中的占位符 URL 替换为您要抓取的页面的实际 URL。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
常量 { 抓取API } = 要求('crawlbase'),
FS = 要求('fs'),
抓取基础令牌 = 'YOUR_CRAWLBASE_JS_TOKEN',
接口= 抓取API({ 象征:crawlbaseToken }),
imdb 页面 URL = 'https://www.imdb.com/title/tt0111161/';

蜜蜂。得到(imdb 页面 URL)。然后(处理CrawlResponse)。捕捉(处理抓取错误);

功能 处理抓取响应(响应){
if (回复。状态码 === 200){
fs。写文件同步('响应.html', 回复。身体);
领事.日志('HTML 已保存到response.html');
}
}

功能 处理抓取错误(错误){
领事.错误(错误);
}

上面的代码片段利用 Crawlbase 库从电影的 IMDb 页面中抓取 HTML 内容。该脚本初始化一个 CrawlingAPI 带有令牌的实例,向 IMDb 页面发出 GET 请求,并在状态代码为 200 的成功响应后,将 HTML 内容写入名为“response.html”的文件。如果在抓取过程中出现任何错误,它会将错误记录到控制台。

HTML 响应:

来自 IMDb 电影页面的 HTML 响应

抓取 IMDb 电影数据

在本节中,我们将学习如何从 IMDb 电影页面中抓取重要且有意义的数据。我们想要抓取的数据包括电影标题、评级、发行日期、持续时间、演员、工作人员、故事情节、类型等详细信息。为此,我们将使用两个库构建一个特殊的 JavaScript 抓取器:Cheerio(通常用于网页抓取)和 fs(有助于文件操作)。我们提供的脚本将分析 IMDb 页面的 HTML 代码(我们在前面的示例中获取),提取所需的信息,并将其保存在 JSON 数组中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
常量 FS = 要求('fs'),
欢呼= 要求('cheerio');

尝试 {
常量 html内容 = fs.读取文件同步('响应.html', 'utf-8'),
$ = 快乐。加载(html内容),
获取内部文本 = (选择器) => $(选择器)。第一()。文本()。修剪()
从链接获取数组 = (选择器) =>
$(选择器)
.地图((_, 元素) => $(元素)。文本()。修剪())
.得到()
通过选择器获取内部文本= (选择器) => {
常量 元素= $(选择器);

if (元素。长度 > 0){
回报 分子
.地图((_, 元素) => $(元素)。文本()。修剪())
.得到()
.加入(',');
}

回报 ''; // 如果没有找到匹配的元素则返回空字符串
},
电影标题 = 获取内部文本('[data-testid="hero__pageTitle"] .hero__primary-text'),
评分 = 获取内部文本('[data-testid =“英雄评级栏__聚合评级__分数”] .sc-bde20123-1.cMEQkK'),
流派= 通过选择器获取内部文本('.ipc-chip-list--baseAlt .ipc-chip__text'),
轮廓= $(“p[data-testid='plot'] span[class^='sc-466bb6c']”).文本()。修剪()
导演= 通过选择器获取内部文本(
'li:contains("Director") a.ipc-metadata-list-item__list-content-item--link:first',
),
作家= 从链接获取数组('li:contains("Writers") a.ipc-metadata-list-item__list-content-item--link'),
独特的作家= [... (作家)],
星星=[
... (
$('li:contains("星星") ul.ipc-metadata-list-item__list-content')
.发现('a.ipc-metadata-list-item__list-content-item--link')
.地图((_, 元素) => $(元素)。文本()。修剪())
.得到()
),
],
用户评论 = 通过选择器获取内部文本('a[href*="/reviews/?ref_=tt_ov_rt"] .score'),
评论家评论 = 通过选择器获取内部文本('a[href*="/externalreviews/?ref_=tt_ov_rt"] .score'),
元分数 = 通过选择器获取内部文本('a[href*="/criticreviews/?ref_=tt_ov_rt"] .score .metacritic-score-box'),
发布日期 = 通过选择器获取内部文本(
'[data-testid="title-details-releasedate"] .ipc-metadata-list-item__list-content-item--link',
),
原产国 = 通过选择器获取内部文本(
'[data-testid="title-details-origin"] .ipc-metadata-list-item__list-content-item--link',
),
语言= 通过选择器获取内部文本(
'[data-testid="title-details-languages"] .ipc-metadata-list-item__list-content-item--link',
),
生产公司= 通过选择器获取内部文本(
'[data-testid="title-details-companies"] .ipc-metadata-list-item__list-content-item--link',
);

常量 电影数据 = {
电影标题,
imdb 评级,

导向器,
作家:独特的作家,
明星,
用户评论,
评论家评论,
元分数,
发布日期,
原产地,
语言,
制作公司,
大纲,
};

领事.日志(JSON.串化(电影数据, , 2));
} 捕捉 (错误) {
领事.错误(“读取或解析 HTML 文件时出错:”, 错误);
}

提供的 JavaScript 代码使用 cheerio 用于从 IMDb 页面的 HTML 文件中解析和提取信息的库。该脚本从“response.html”文件中读取 HTML 内容,将其加载到 Cheerio 实例中,然后使用各种选择器和提取函数来收集数据。

提取的电影数据包括标题、IMDb 评级、类型、情节大纲、导演、编剧、明星、用户评论、影评人评论、元评分、发行日期、原籍国、语言和制作公司。该信息被组织成一个 movieData 对象并打印为格式化 JSON 字符串

JSON 响应:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
“电影标题”: “肖申克的救赎”,
“imdb 评级”: “9.3”,
“类型”: “戏剧”,
“导演”: 弗兰克·达拉邦特,
“作家”: [“斯蒂芬·金”, 弗兰克·达拉邦特],
“星星”: [“蒂姆·罗宾斯”, “摩根·弗里曼”, “鲍勃·冈顿”],
“用户评论”: “10.8K”,
《评论家评论》: “176”,
“元分数”: “82”,
“发布日期”: “14 年 1994 月 XNUMX 日(美国)”,
“原产地”: “美国”,
“语言”: “英语”,
“制作公司”: “城堡石娱乐”,
“大纲”: “在几年的时间里,两个囚犯建立了友谊,寻求安慰,最终通过基本的同情心得到救赎。在几年的时间里,两个囚犯建立了友谊,通过基本的同情心寻求安慰,最终得到救赎。”经过几年的时间,两名囚犯建立了友谊,寻求安慰,并最终通过基本的同情心获得救赎。”
}

最后的思考

本指南为您提供信息和工具,帮助您使用 JavaScript 和 Crawlbase 抓取 API 从 IMDb 抓取数据。您可以收集各种数据集,包括电影标题、评级、发行日期、时长、演员、工作人员、故事情节、类型等。无论您是网络抓取的初学者还是有一定经验,这些提示都将帮助您入门。如果您热衷于尝试在其他网站上进行抓取,例如 彭博, 产品亨特Expedia的,我们还有其他指南供您探索。

相关指南:

📜 如何抢夺百思买

📜 如何抓取 StackOverflow

📜 如何刮沃尔玛

📜 如何抓取全球速卖通

📜 如何抓取 Flipkart

常见问题解答

我可以从 IMDb 中抓取电影数据吗?

网络抓取通常被认为是合法的,但特定平台可能有您必须遵守的规则。 IMDb 允许将其内容用于非个人目的,但您应查看 IMDb 的使用条件以了解详细规定。注意您的数据使用情况并遵守您所在国家/地区的法律至关重要。虽然有限的个人抓取,但非商业用途是可以容忍的。未经明确许可,禁止大规模或商业规模的 IMDb 数据抓取。此外,某些电影/电视节目可能有禁止抓取的版权限制。

IMDb 抓取有频率限制吗?

IMDb 并未正式披露抓取其网站的具体频率限制。但是,建议遵循道德抓取实践,避免服务器超载,并考虑他们的服务条款。为了简化此过程,请考虑使用 Crawlbase Crawling API,它提供了一种结构化和托管的网络抓取方法。该 API 允许用户以受控的时间间隔获取数据,确保遵守网站策略并防止可能导致 IP 禁止的过多请求。

抓取 IMDb 时如何处理动态内容?

在 IMDb 上抓取动态内容时,Crawlbase 抓取 API 是一个很有价值的工具。它可以有效地处理 JavaScript 生成的页面,包括使用 React、Angular、Vue、Ember、Meteor 等构建的页面。该 API 通过抓取和提供完整的 HTML 内容来确保准确的数据提取,即使它严重依赖于动态脚本。此功能允许用户成功抓取 IMDb 的动态内容,捕获全面的信息,同时受益于 Crawlbase 抓取 API 的简单性和有效性。

IMDb 有 API 吗?

IMDb 不提供用于访问其数据的官方公共 API。但是,有一些非官方 API 和第三方服务可以提供对各种格式(例如 JSON 或 XML)的 IMDb 数据的访问。这些非官方 API 可能有限制,并且可能未得到 IMDb 的认可。在将其集成到您的项目中以访问 IMDb 数据之前,请务必查看其服务条款和使用政策。作为附加解决方案,请考虑使用 Crawlbase Crawling API,这是一种结构化网络抓取工具,可确保以合规且高效的方式访问 IMDb 数据。