使用 Node.js 进行网页爬取的基本指南

NodeJS 是 JavaScript 的服务器端框架/库。自发布以来,它使 JavaScript 开发变得更加简单和神奇。NodeJS 与 NPM 相结合,为即插即用库和模块提供了无限可能。NPM 承载着大量可用于 NodeJS 应用程序的库和模块。这些库非常稳定,并为框架添加了更多的功能。 

使用 Node.js 进行网络搜刮

使用 NodeJS,您可以创建应用程序接口,也可以使用第三方应用程序接口。 网络搜刮要求 NodeJS 可以让您访问第三方 API 和网页,对其进行解析,并从返回的响应中找出所需的信息。如果您是网络搜刮的新手,但不是 JavaScript 生态系统的新手,那么 NodeJS 具有网络搜刮功能就可以让您放心了。 

随着时间的推移,我们将发现 NodeJS 和一些 NPM 库如何能帮助您刮擦几乎任何类型的网页。您可以轻松 招聘远程 Node JS 开发人员 来为你完成这项工作。我们还将通过一个实践部分,刮取维基百科页面以获取有关美国总统的详细信息。但首先,让我们来了解一下为什么需要网络搜刮。

为什么需要网络搜索?

网络搜刮是一种以自动化方式从网站获取数据的方法。使用网络抓取,你可以从几乎任何网站上抓取详细信息,而无需考虑其应用程序接口(API)的知识和步骤。 使用 Nodejs 指导应用程序接口.虽然网络搜刮在某些地方是合法的,在某些地方是非法的,但在搜刮任何内容之前,最好征得网站所有者的同意,或者以不损害网站主要目标的方式进行搜刮。 

网络搜刮可用于许多不同的方面,如价格搜刮、市场研究、收集财务数据、验证和重新发布新闻、数据收集自动化等。 

网络报废

网络搜刮的主要目的是获取尽可能多的数据。有了网络搜刮,你就可以无限制地搜刮数据,而不受任何 API 调用的限制。 

了解了为什么需要网络搜刮之后,让我们来了解一下使用 NodeJS 开始网络搜刮需要什么。 

使用 NodeJS 进行网络抓取的要求

  • NodeJS

使用 NodeJS 进行网络刮擦的主要要求之一就是 NodeJS 本身。您需要先安装 NodeJS。要安装 NodeJS,可以前往 nodejs.org 网站下载该框架的 LTS 版本。在此过程中,您还应安装 NPM,即 Node Package Manager。它是 NodeJS 应用程序最关键的部分,可以让你安装和管理项目中使用的其他库。

  • Request-promise

安装好 NodeJS 和 NPM 后,就该安装 request-promise 模块了。顾名思义,request-promise 是一个 NPM 库,它允许你发送支持承诺功能的请求。这个库是网络搜索项目的基础,因为没有它,你就无法向任何网页发送请求并获得响应。 

  • CheerioJS

安装 request-promise 模块后,你需要设置 CheerioJS。这是另一个 NPM 库,将在所有网络搜刮项目中广泛使用。Cheerio 将帮助我们解析通过 request-promise 模块发送请求后收到的所有网页响应。网页解析完成后,我们就可以遍历新结构,并迅速找出与我们相关的内容。 

  • Puppeteer

Puppeteer 是一个能帮助我们自动化许多事情的库。有了这个库,我们的网络浏览器就有了一个控制器,可以用脚本来控制它。我们可能不会在演练示例中使用它,因为我们只是做简单的刮擦。但是,当你进行大型网络搜刮项目时,就需要 Puppeteer 了。 

现在,您已经知道 网络搜索所需工具 那么,为什么不使用它们并用 NodeJS 创建一个示例网络搜刮项目呢?让我们进入网络刮擦实践部分。

"旋转代理 "越来越受欢迎,因为 网络清除器这些代理服务器可以让你在不被网站所有者检测到的情况下,匿名搜索网页数据,并定期更改自己的 IP 地址以避免被屏蔽。这些代理可以让你在不被网站所有者检测到的情况下进行网络数据搜刮,因为网站所有者会设置 IP 屏蔽来防止这种情况。

使用 NodeJS 进行网络抓取实践

在本示例中,我们将抓取维基百科中有关美国总统的信息。这是一个相当简单的抓取脚本,我们将使用 request-promise、cheerio 和 Puppeteer 来获取数据。

网络搜刮的主要步骤是创建一个名为 firstScraper.js 的新 JS 文件,在文件中编写以下代码并保存。  

const rp = require('request-promise');

const url = 'https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States';

rp(url)

  .then(function(html){

    //success!

    console.log(html);

  })

  .catch(function(err){

    //处理错误

  });

在这里,我们导入 request-promise 模块,定义要刮擦的 URL,然后在 request-promise 模块上编写一个函数,点击 URL,等待响应,并将响应打印在控制台上。 

要找到正确的详细信息,我们需要在网络浏览器中检查并查看一次数据。为此,请打开网页浏览器,转到 URL,然后打开开发工具。从那里,只需检查页面元素,并记下 HTML 结构、类名和存储所需信息的 ID。这很简单,希望你没有遇到任何错误。 

一旦确定了需要的详细信息,并了解了类名、ID 和 HTML 结构,就可以使用 cheerio 来解析页面并查找相关详细信息。在这里,我们要解析的是美国总统的姓名和 URL,因此可以在包裹在大标签内的 HTML A 标签中找到它们。 

在 firstScraper.js 文件中复制下面的代码,并删除所有之前的代码。

const rp = require('request-promise');

const $ = require('cheerio');

const url = 'https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States';

rp(url)

  .then(function(html){

    //success!

    console.log($('big > a', html).length);

    console.log($('big > a', html));

  })

  .catch(function(err){

    //处理错误

  });

 

在上述代码中,我们使用 cheerio 解析 HTML 页面,并对符合我们表达式的元素进行控制。$('big > a', html) 代码将找出响应网页中所有包含 A 标记的 big 标记,并将其作为一个 JSON 对象数组进行控制。 

返回数组的长度应为 45,即迄今为止美国总统的人数。页面上可能存在隐藏的大标签,为了不将它们包含在输出中,我们需要设置一个条件,以便只获取相关数据。因此,复制下面的代码并替换到 firstScraper.js 文件中。

const rp = require('request-promise');

const $ = require('cheerio');

const url = 'https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States';

 

rp(url)

  .then(function(html){

    //success!

    const wikiUrls = [];

    for (let i = 0; i < 45; i++) {

      wikiUrls.push($('big > a', html)[i].attribs.href);

    }

    console.log(wikiUrls);

  })

  .catch(function(err){

    //处理错误

  });

上述代码将确保我们只获取 45 位美国总统的数据,所有数据都将存储在一个数组中。数组中将存储每位总统的维基百科网页 URL。 

您已经成功地使用 NodeJS 搜刮、解析和存储了一个网页。现在,您可以将这些存储的 URL 与 Puppeteer 结合使用,自动搜刮每位总统的更多详细信息,如生日、任期等。

结论

即将结束,现在你已经了解了使用 NodeJS 进行网络刮擦的基础知识,因此请充分利用这些知识,合法地刮擦网站,尽可能多地提取和收集相关数据。不断尝试新事物,你很快就会 掌握网络搜索 使用 NodeJS。

您喜欢这个代理主题吗?

点击星星即可评分!

平均评分 0 /5.计票: 0

目前没有投票!成为第一个给帖子评分的人。

发表评论

zh_CNChinese