前言
在 Web 时代,数据是我们最宝贵的财富。但是,如何高效地获取自己想要的数据呢?网络爬虫也许是一个好选择。本篇文章将详细地介绍如何使用 Node.js 实现 HTTPS 协议的网络爬虫,也将介绍如何利用爬虫技术高效地获取所需数据。
什么是网络爬虫?
网络爬虫是一种可以自动获取互联网上的信息,并将其组织成数据的程序。爬虫可以按照一定的规则,递归地获取网站上的各种页面,然后将其解析,提取并保存所需的数据。网站上的数据可以是文字、图片、音频和视频等多种类型,也许是我们需要的数据。
Node.js 库
在 Node.js 中,我们有很多可以用来实现爬虫的库。其中,最常用的两个库是 http
和 https
。由于本篇文章着重介绍基于 HTTPS 协议的爬虫,我们将主要使用 https
库。
HTTPS 协议
HTTP(Hypertext Transfer Protocol)是 Web 的核心协议。但是,HTTP 协议是明文传输的,容易被黑客截取,造成安全隐患。因此,HTTPS(HTTP Secure)协议应运而生,它在加密、认证和完整性等方面提供了更高的保障。
HTTPS 协议的一般流程是:
- 客户端向服务器发起 HTTPS 请求,连接建立前需要握手认证;
- 服务器将公钥传给客户端,用于加密和解密;
- 客户端使用服务器传来的公钥加密传输的数据;
- 服务器使用相应的私钥进行解密并返回响应数据。
使用 Node.js 实现 HTTPS 网络爬虫
现在,我们将开始实现一个基于 HTTPS 协议的网络爬虫。爬虫可以循环地从目标网站中获取特定的信息,并将其存储到本地。在本篇文章中,我们以爬取豆瓣电影为例,介绍具体实现方式。
爬虫的基本框架
我们先来看看一个基本的爬虫框架,通过该框架,我们可以轻松地发出 HTTPS 请求,并从响应数据中提取所需信息。
----- ----- - ----------------- ----- ------- - - --------- ----------------- ----- ---- ----- ------------ ------- ----- -- ----- --- - ---------------------- ----- -- - ----------------- -------------------- ----------------- --------------------------------- ------------------------ -------------- ------- -- - ------------------ ----------- --- ------------- -- -- - -------------------- --- --- --------------- --- -- - ---------------------- --------------- --- ----------
使用该框架,我们可以发出一个 GET 请求,获取豆瓣电影 2019 年的页面源代码。具体参数如下:
- hostname:目标网站的域名;
- port:目标网站的端口号(默认为 80);
- path:目标页面的路径;
- method:HTTP 请求方法(GET 或 POST)。
我们可以看到,在上述代码中,我们采用 https.request()
函数发起请求,并使用 res.on()
函数来处理响应数据。在该函数中,我们可以对响应数据进行分析,并对其中的有用数据进行提取。
豆瓣电影页面的分析
在我们开始爬取豆瓣电影的数据之前,我们需要了解该网站的页面结构,以便我们可以快速地获取所需的数据。具体来说,我们将需要爬取电影的名称、评分、导演、演员等信息。
我们可以先到 豆瓣电影 首页,点击页面左侧的“分类浏览”来打开豆瓣电影年度榜单页面。在该页面中,我们选择 2019 年的榜单,记下该页面的 URL。由于该页面是通过 Ajax 技术动态加载的,因此我们需要使用浏览器开发者工具中的“Network”面板来找到真实请求的地址。
如果我们观察该请求的响应数据,我们可以发现该页面主要由两个部分组成:一部分是前 20 个电影的缩略图以及概要信息,另一部分则是底部分页。我们需要翻页来获取完整的数据。
下面的代码显示了如何使用该框架来获取更多的页面数据:
----- ----- - ----------------- ----- ------- - - --------- ------------------- ----- ---- ----- --------------------------------------------------------------- ------- ----- -- ----- ----- - -- ----- --- - -- --- ---- - - ------ - -- ---- ---- - ----- ------- - -- - -- - --- ------------ -- -------- ----- --- - ---------------------- ----- -- - ----------------- -------------------- ----------------- --------------------------------- ------------------------ -------------- ------- -- - ------------------ ----------- --- ------------- -- -- - -------------------- --- --- --------------- --- -- - ---------------------- --------------- --- ---------- -
上述代码中,我们使用 for 循环来遍历所有页面,并使用 options.path += pageNum
将当前页码添加到请求路径中。由于豆瓣电影的 API 一次最多只能返回 20 条记录,因此我们需要对页数进行分页处理。
在上述代码中,我们通过 res.on()
函数来处理响应数据。由于响应数据以 JSON 格式返回,我们可以使用 JSON.parse()
函数将其转换为 JavaScript 对象。然后,我们可以使用 forEach()
函数来迭代并提取有用的数据。
提取有用数据
如前所述,我们需要爬取电影的名称、评分、导演、演员等信息。我们可以稍做修改,返回更加有用的数据。
----- ----- - ----------------- ----- ------- - - --------- ------------------- ----- ---- ----- --------------------------------------------------------------- ------- ----- -- ----- ----- - -- ----- --- - -- --- ---- - - ------ - -- ---- ---- - ----- ------- - -- - -- - --- ------------ -- -------- ----- --- - ---------------------- ----- -- - ----------------- -------------------- ----------------- --------------------------------- ------------------------ -------------- ------- -- - ----- ------ - ------------------ ---------------------- -- - --------------------------------------------------- ---------------------- ------------------------- ------ --- --- ------------- -- -- - -------------------- --- --- --------------- --- -- - ---------------------- --------------- --- ---------- -
如上所示,我们修改了 res.on()
函数的处理方式,使用 JSON.parse()
函数将响应数据转换为 JavaScript 对象,并迭代其中的每一部电影。在迭代过程中,我们调用了电影的名称、评分、导演和演员等属性,并使用 console.log()
函数将其输出到控制台。
总结
本篇文章详细介绍了如何使用 Node.js 实现基于 HTTPS 协议的网络爬虫,以及如何爬取豆瓣电影的数据。爬虫技术可以提高数据获取的效率,并帮助我们从庞杂的数据中提取所需信息。如果您感兴趣,不妨尝试一下,看看能否爬取其他有用的数据。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/648c177348841e9894a65b6c