免费试用代理

在本指南中,我们将探讨为什么使用前端 JavaScript 可能不是网页抓取的最佳选择,并将为您提供从头开始使用 Node.js 创建网页抓取工具的分步教程。

使用前端 JavaScript 进行网页抓取

前端 JavaScript 在网页抓取方面存在局限性。首先,您需要直接从浏览器控制台执行 JavaScript 网页抓取脚本,这无法通过编程轻松实现自动化。

其次,如果您打算从不同的网页抓取数据,通常需要使用 AJAX 请求来获取它们。但是,请务必记住,Web 浏览器对 AJAX 请求强制实施同源策略。这意味着,使用前端 JavaScript,您只能访问同一源内的网页。

为了说明这个限制,让我们考虑一个简单的例子。假设您当前正在访问fineproxy.com 上的网页。在这种情况下,您的前端 JavaScript 网页抓取脚本将只能获取fineproxy.com 域下的网页。

然而,值得注意的是,这并不意味着 JavaScript 不适合网络爬行。事实上,Node.js 使您能够在服务器上运行 JavaScript,从而有效地绕过上述限制。

现在,让我们深入研究如何使用 Node.js 创建 JavaScript Web scraper。

使用 JavaScript 和 Node.js 进行网络抓取

先决条件

在开始构建 Node.js 网络抓取应用程序之前,您必须确保满足以下先决条件:

  1. Node.js 18+ 与 npm 8+:您可以将 Node.js 18+ 的任何 LTS(长期支持)版本与 npm 一起使用。作为参考,本教程基于 Node.js 18.12 和 npm 8.19,它代表了撰写本文时可用的最新 Node.js LTS 版本。
  2. 支持 JavaScript 的集成开发环境 (IDE):虽然本教程使用 IntelliJ IDEA 社区版作为选择的 IDE,但您可以使用为 JavaScript 和 Node.js 提供支持的任何其他 IDE。

通过满足这些先决条件,您将准备好使用 JavaScript 和 Node.js 创建自己的网络抓取工具。

Node.js 的顶级 JavaScript 网页抓取库

让我们深入研究一些专为 Node.js 环境中的网页抓取而设计的最佳 JavaScript 库:

  1. Axios:Axios 是一个用户友好的库,可简化 JavaScript 中的 HTTP 请求。它用途广泛,能够在浏览器和 Node.js 环境中运行,并且是使用最广泛的 JavaScript HTTP 客户端之一。
  2. Cheerio:Cheerio 是一个轻量级库,它提供类似 jQuery 的 API,用于导航 HTML 和 XML 文档。使用 Cheerio,您可以解析 HTML 文档、选择特定的 HTML 元素并从中提取数据。本质上,Cheerio 提供了强大的网络抓取 API。
  3. Selenium:Selenium 是一个支持多种编程语言的综合库,主要用于 Web 应用程序的自动化测试。它还拥有无头浏览器功能,使其成为网络抓取任务的宝贵工具。
  4. Playwright:Playwright 由 Microsoft 开发,是一种为 Web 应用程序创建自动化测试脚本的多功能工具。它使您能够指示浏览器执行特定操作,使其成为网络抓取的合适选择,特别是在无头浏览器模式下。
  5. Puppeteer:Puppeteer 是 Google 的一款工具,专门用于自动化 Web 应用程序测试。 Puppeteer 基于 Chrome DevTools 协议构建,允许与浏览器进行编程交互,模仿人类用户操作。有关 Selenium 和 Puppeteer 之间区别的更多见解,请参阅我们的综合指南。

在 Node.js 中构建 JavaScript Web Scraper

在本节中,您将获得在 Node.js 环境中构建 JavaScript Web scraper 的实践经验。该抓取工具的任务是自动从 Fineproxy 主页提取数据。在整个 Node.js 网页抓取教程中,您将学习如何定位网页上的特定 HTML 元素,从中提取相关数据,并将抓取的数据转换为更加结构化和可用的格式。

如何使用 Node.js 抓取数据:带有示例的分步指南

第 1 步:设置 Node.js 环境

在开始抓取之前,您需要设置 Node.js 环境。您可以这样做:

例子:

# Install Node.js (if not already installed) $ curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - $ sudo apt-get install -y nodejs # Check Node.js and npm versions $ node -v $ npm -v

第 2 步:创建一个新的 Node.js 项目

您需要为抓取任务创建一个新的 Node.js 项目。这可以帮助您轻松管理依赖项。

例子:

# Create a new directory for your project $ mkdir web-scraper $ cd web-scraper # Initialize a new Node.js project $ npm init -y

第 3 步:安装必要的软件包

为了有效地抓取数据,您需要一些必要的包。我们将安装 Axios 来发出 HTTP 请求,并安装 Cheerio 来解析 HTML。

例子:

# Install Axios and Cheerio $ npm install axios cheerio

第 4 步:使用 Axios 发出 HTTP 请求

Axios 是一个用于发出 HTTP 请求的强大库。您可以使用它来获取网页。

例子:

const axios = require('axios'); // Make a GET request axios.get('https://example.com') .then((response) => { // Handle the response here }) .catch((error) => { // Handle errors });

第 5 步:使用 Cheerio 解析 HTML

Cheerio 是一个很棒的 HTML 解析库。您可以使用它来选择和操作网页上的元素。

例子:

const cheerio = require('cheerio'); // Load HTML content const html = '<h1>Hello, World!</h1>'; const $ = cheerio.load(html); // Select and extract data const heading = $('h1').text(); console.log(heading); // Output: Hello, World!

第 6 步:选择并提取数据

现在您可以解析 HTML,您可以从网页中选择和提取特定数据。

例子:

// Select and extract links const links = $('a'); links.each((index, element) => { const link = $(element).attr('href'); console.log(link); });

第 7 步:处理分页

许多网站都有分页内容。您需要处理分页以从多个页面中抓取数据。

例子:

// Scrape data from multiple pages async function scrapeMultiplePages() { for (let page = 1; page <= 5; page++) { const response = await axios.get(`https://example.com/page/${page}`); const $ = cheerio.load(response.data); // Extract data from the current page // (Example: scraping a list of articles) } }

第8步:存储抓取的数据

收集数据后,您应该将其存储起来以供将来使用。您可以将其保存到文件、数据库或云中。

例子:

// Save scraped data to a JSON file const fs = require('fs'); const dataToSave = { /* your data here */ }; fs.writeFileSync('data.json', JSON.stringify(dataToSave));

第 9 步:处理错误和异常

网页抓取并不总是没有错误。您应该优雅地处理错误,以确保您的抓取工具顺利运行。

例子:

// Handle errors when making requests axios.get('https://example.com') .then((response) => { // Handle success }) .catch((error) => { console.error('Error:', error.message); });

第 10 步:尊重礼貌和道德

成为一名负责任的抓取者并遵守道德准则至关重要。避免网站超载请求并尊重其服务条款。

例子:

// Set a delay between requests to be polite const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms)); async function politeScraping() { for (let page = 1; page <= 5; page++) { await axios.get(`https://example.com/page/${page}`); await delay(1000); // Delay for 1 second between requests } }

第 11 步:运行您的网页抓取工具

最后,是时候运行网络抓取工具并监控其进度了。

例子:

# Run your Node.js script $ node scraper.js
使用 JavaScript 和 Node.js 进行网络抓取

在本教程中,我们探讨了使用 JavaScript 在前端进行网页抓取的局限性,并讨论了为什么 Node.js 成为更好的选择。此外,我们还深入研究了制作 Node.js 网页抓取脚本所需的基本组件,并检查了使用 JavaScript 从网页提取数据的过程。具体来说,您已经深入了解了如何利用 Cheerio 和 Axios 的强大功能在 Node.js 中创建基于 JavaScript 的 Web 抓取应用程序,所有这些都通过实际示例进行了说明。正如您所见,使用 Node.js 进行网页抓取可以非常高效地完成,通常只需要几行代码。

然而,必须承认网络抓取可能并不总是一件简单的事情。这种复杂性源于经常出现的无数挑战。值得注意的是,反抓取和反机器人措施的扩散越来越令人担忧。幸运的是,有一个解决方案可以轻松克服这些障碍:使用 Fineproxy 提供的尖端、先进的网络抓取工具。

NodeJS 适合网页抓取吗?

是的,NodeJS 是 Web 抓取的热门选择,因为它具有异步特性,可以实现高效、并发的抓取。您可以使用 Cheerio 或 Puppeteer 等库来使用 NodeJS 从网页中解析和提取数据。

我可以使用 JavaScript 进行网页抓取吗?

是的,您可以使用 JavaScript 进行网页抓取。

NodeJS 可以与 JavaScript 一起使用吗?

是的,Node.js 可以与 JavaScript 一起使用。

最适合 JavaScript 的网页抓取工具是什么?

Puppeteer 被广泛认为是最好的 JavaScript 网页抓取工具之一。

有用的链接:

https://www.npmjs.com/

https://nodejs.org/api/http.html

评论 (0)

这里还没有评论,你可以成为第一个评论者!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

选择和购买代理

数据中心代理

轮流代理

UDP代理机构

受到全球 10000 多家客户的信赖

代理客户
代理客户
代理客户 flowch.ai
代理客户
代理客户
代理客户