iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >如何使用Node.js+Cheerio进行数据抓取
  • 862
分享到

如何使用Node.js+Cheerio进行数据抓取

2024-04-02 19:04:59 862人浏览 薄情痞子
摘要

这篇文章主要介绍“如何使用node.js+Cheerio进行数据抓取”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用node.js+Cheerio进行数据抓取

这篇文章主要介绍“如何使用node.js+Cheerio进行数据抓取”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用node.js+Cheerio进行数据抓取”文章能帮助大家解决问题。

如何使用Node.js+Cheerio进行数据抓取

先决条件

以下是本教程需要的一些东西:

  • 你需要安装Node.js。如果你没有 Node,只需确保从Node.js 下载页面为你的系统下载它

  • 你需要在你的机器上安装一个文本编辑器,比如vscode或Atom

  • 你至少应该对 javascript、Node.js 和文档对象模型 (DOM) 有基本的了解。

什么是 Cheerio?

Cheerio 是一个在 Node.js 中解析 html 和 XML 的工具,在 GitHub 上非常受欢迎,拥有超过23k 的 star 。

它快速、灵活且易于使用。由于它实现了 Jquery 的一个子集,如果你已经熟悉 JQuery,那么很容易开始使用 Cheerio。

Cheerio 和 WEB 浏览器之间的主要区别在于,cheerio 不生成视觉渲染、加载 CSS、加载外部资源或执行 JavaScript。它只是解析标记并提供用于操作生成的数据结构api。这就解释了为什么它也非常快——cheerio 文档。

如果你想使用cheerio 来抓取网页,您需要首先使用axiOS或node-fetch等包来获取标记。

如何使用 Cheerio 在 Node 中抓取网页

在此示例中,我们将抓取此 Wikipedia 页面上列出的所有国家和其他司法管辖区的ISO 3166-1 alpha-3 代码。它位于ISO 3166-1 alpha-3页面的当前代码部分下。

这是国家/司法管辖区列表及其相应代码的样子:

如何使用Node.js+Cheerio进行数据抓取

第 1 步 - 创建工作目录

在此步骤中,您将通过在终端上运行以下命令为您的项目创建一个目录。该命令将创建一个名为learn-cheerio. 如果你愿意,你可以给它一个不同的名字。

mkdir learn-cheerio

learn-cheerio成功运行上述命令后,您应该能够看到一个名为 created 的文件夹。

在下一步中,您将在您喜欢的文本编辑器中打开刚刚创建的目录并初始化项目。

第 2 步 - 初始化项目

在此步骤中,您将导航到项目目录并初始化项目。在您喜欢的文本编辑器中打开您在上一步中创建的目录,并通过运行以下命令来初始化项目。

npm init -y

成功运行上述命令将package.JSON在项目目录的根目录下创建一个文件。

在下一步中,您将安装项目依赖项。

第 3 步 - 安装依赖项

在此步骤中,您将通过运行以下命令来安装项目依赖项。这将需要几分钟,所以请耐心等待。

npm i axios cheerio pretty

成功运行上述命令将在字段package.json下的文件中注册三个依赖项。dependencies第一个依赖是axios,第二个是cheerio,第三个是pretty

axios是一个非常流行的Http 客户端,可以在 node 和浏览器中运行。我们需要它,因为cheerio 是一个标记解析器。

为了让 Cheerio 解析标记并抓取您需要的数据,我们需要axios用于从网站获取标记。如果您愿意,可以使用另一个 HTTP 客户端来获取标记。它不一定是axios.

pretty是用于美化标记的 npm 包,以便在终端上打印时可读。

在下一部分中,您将检查将从中抓取数据的标记。

第 4 步 - 检查您要抓取的网页

在从网页中抓取数据之前,了解页面的 HTML 结构非常重要。

在此步骤中,您将检查要从中抓取数据的网页的 HTML 结构。

导航到Wikipedia 上的ISO 3166-1 alpha-3 代码页面。在“当前代码”部分下,有一个国家列表及其相应的代码。CTRL + SHIFT + I您可以通过按chrome 上的组合键或右键单击然后选择“检查”选项来打开 DevTools 。

这是我在 chrome DevTools 中的列表:

如何使用Node.js+Cheerio进行数据抓取

在下一节中,您将编写用于抓取网页的代码。

第 5 步 - 编写代码以抓取数据

在本节中,你将编写用于抓取我们感兴趣的数据的代码。首先运行以下将创建app.js文件的命令。

touch app.js

成功运行上述命令将app.js在项目目录的根目录下创建一个文件。

像任何其他 Node 包一样,在开始使用它们之前,你必须首先require axioscheerio和。你可以通过在刚刚创建pretty的文件顶部添加下面的代码来做到这一点。app.js

const axios = require("axios");
const cheerio = require("cheerio");
const pretty = require("pretty");

在我们编写用于抓取数据的代码之前,我们需要学习cheerio. 我们将解析下面的标记并尝试操作生成的数据结构。这将帮助我们学习 Cheerio 语法及其最常用的方法。

下面的标记是ul包含我们元素的li元素。

const markup = `
<ul class="fruits">
  <li class="fruits__manGo"> Mango </li>
  <li class="fruits__apple"> Apple </li>
</ul>
`;

将上述变量声明添加到app.js文件中

如何在 Cheerio 中加载标记

cheerio你可以使用该cheerio.load方法加载标记。该方法将标记作为参数。它还需要另外两个可选参数。如果你有兴趣,可以在文档中阅读有关它们的更多信息。

下面,我们传递第一个也是唯一需要的参数,并将返回值存储在$变量中。我们使用该变量是因为cheerio 与Jquery$的相似性。如果你愿意,可以使用不同的变量名。

将以下代码添加到你的app.js文件中:

const $ = cheerio.load(markup);
console.log(pretty($.html()));

如果你现在通过在终端上app.js运行命令来执行文件中的代码node app.js,你应该能够在终端上看到标记。这是我在终端上看到的:

如何使用Node.js+Cheerio进行数据抓取

如何在 Cheerio 中选择元素

Cheerio 支持大多数常见的 CSS 选择器,例如classidelement选择器等。在下面的代码中,我们选择带有类的元素fruits__mango,然后将所选元素记录到控制台。将以下代码添加到你的app.js文件中。

const mango = $(".fruits__mango");
console.log(mango.html()); // Mango

如果你使用命令执行,上述代码行将Mango在终端上记录文本。app.js``node app.js

如何在 Cheerio 中获取元素的属性

您还可以选择一个元素并获取特定属性,例如classid或所有属性及其对应值。

将以下代码添加到你的app.js文件中:

const apple = $(".fruits__apple");
console.log(apple.attr("class")); //fruits__apple

上面的代码将登录fruits__apple终端。fruits__apple是所选元素的类。

如何循环遍历 Cheerio 中的元素列表

Cheerio 提供了.each循环遍历多个选定元素的方法。

下面,我们选择所有元素并使用该方法li循环遍历它们。.each我们在终端上记录每个列表项的文本内容。

将以下代码添加到你的app.js文件中。

const listItems = $("li");
console.log(listItems.length); // 2
listItems.each(function (idx, el) {
  console.log($(el).text());
});
// Mango
// Apple

上面的代码会记录2,也就是列表项的长度,执行完代码后会在终端上显示文字Mango和。Apple``app.js

如何在 Cheerio 中将元素附加或添加到标记中

Cheerio 提供了一种将元素附加或附加到标记的方法。

append方法会将作为参数传递的元素添加到所选元素的最后一个子元素之后。另一方面,prepend将在选定元素的第一个子元素之前添加传递的元素。

将以下代码添加到你的app.js文件中:

const ul = $("ul");
ul.append("<li>Banana</li>");
ul.prepend("<li>Pineapple</li>");
console.log(pretty($.html()));

在向标记添加和添加元素之后,这是我登录$.html()终端时看到的内容:

如何使用Node.js+Cheerio进行数据抓取

这些是 Cheerio 的基础知识,可以帮助你开始网络抓取。 要从 Wikipedia 抓取我们在本文开头描述的数据,请将以下代码复制并粘贴到app.js文件中:

// Loading the dependencies. We don't need pretty
// because we shall not log html to the terminal
const axios = require("axios");
const cheerio = require("cheerio");
const fs = require("fs");

// URL of the page we want to scrape
const url = "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3";

// Async function which scrapes the data
async function scrapeData() {
  try {
    // Fetch HTML of the page we want to scrape
    const { data } = await axios.get(url);
    // Load HTML we fetched in the previous line
    const $ = cheerio.load(data);
    // Select all the list items in plainlist class
    const listItems = $(".plainlist ul li");
    // Stores data for all countries
    const countries = [];
    // Use .each method to loop through the li we selected
    listItems.each((idx, el) => {
      // Object holding data for each country/jurisdiction
      const country = { name: "", iso3: "" };
      // Select the text content of a and span elements
      // Store the textcontent in the above object
      country.name = $(el).children("a").text();
      country.iso3 = $(el).children("span").text();
      // Populate countries array with country data
      countries.push(country);
    });
    // Logs countries array to the console
    console.dir(countries);
    // Write countries array in countries.json file
    fs.writeFile("coutries.json", JSON.stringify(countries, null, 2), (err) => {
      if (err) {
        console.error(err);
        return;
      }
      console.log("Successfully written data to file");
    });
  } catch (err) {
    console.error(err);
  }
}
// Invoke the above function
scrapeData();

通过阅读代码,你了解正在发生的事情吗?如果没有,我现在将详细介绍。我还对每一行代码进行了注释,以帮助你理解。

在上面的代码中,我们需要文件顶部的所有依赖项,app.js然后我们声明了scrapeData函数。在函数内部,使用axios. 然后将我们需要抓取的页面的获取 HTML 加载到cheerio.

国家/地区列表及其对应iso3代码嵌套在一个div具有 . 类的元素中plainlistli元素被选中,然后我们使用该方法循环遍历它们.each。每个国家的数据都被抓取并存储在一个数组中。

使用命令运行上述代码后node app.js,将抓取的数据写入countries.json文件并打印在终端上。这是我在终端上看到的部分内容:

如何使用Node.js+Cheerio进行数据抓取

关于“如何使用Node.js+Cheerio进行数据抓取”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网VUE频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: 如何使用Node.js+Cheerio进行数据抓取

本文链接: https://www.lsjlt.com/news/98412.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Node.js+Cheerio进行数据抓取
    这篇文章主要介绍“如何使用Node.js+Cheerio进行数据抓取”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用Node.js+Cheerio进行数据抓取...
    99+
    2024-04-02
  • 使用Charles进行网络抓包截取数据
    如何使用Charles进行网络抓包截取数据 文章目录 前言一、Charles是什么?二、使用步骤1.下载安装2.配置网络3.SSL代理设置(可选)4.开始抓包5.查看抓包数据6.截取数据...
    99+
    2023-09-02
    网络 网络爬虫
  • 如何在Python中进行网络数据抓取
    如何在Python中进行网络数据抓取网络数据抓取是指从互联网上获取信息的过程,在Python中,有许多强大的库可以帮助我们实现这个目标。本文将介绍如何使用Python进行网络数据抓取,并提供具体的代码示例。安装必要的库在开始之前,我们需要安...
    99+
    2023-10-22
    数据抓取 Python编程 网络数据抓取
  • 如何使用Puppeteer进行新闻网站数据抓取和聚合
    导语 Puppeteer是一个基于Node.js的库,它提供了一个高级的API来控制Chrome或Chromium浏览器。通过Puppeteer,我们可以实现各种自动化任务,如网页截图、PDF生成、表单填写、网络监控等。本文将介绍如何使用...
    99+
    2023-08-30
    Puppeteer 网络爬虫 数据抓取 爬虫代理 亿牛云
  • PHP中如何进行网络爬虫和数据抓取?
    随着互联网时代的到来,网络数据的爬取与抓取已成为许多人的日常工作。在支持网页开发的程序语言中,PHP以其可扩展性和易上手的特点,成为了网络爬虫和数据抓取的热门选项。本文将从以下几个方面介绍PHP中如何进行网络爬虫和数据抓取。一、HTTP协议...
    99+
    2023-05-20
    PHP 网络爬虫 数据抓取
  • python如何使用libpcap库进行抓包及数据处理
    今天小编给大家分享一下python如何使用libpcap库进行抓包及数据处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。p...
    99+
    2023-07-04
  • 利用Python从网页抓取数据并进行分析
    在当今信息爆炸的时代,网络成为人们获取信息的主要途径之一,而数据挖掘则成为了解析这些海量数据的重要工具。Python作为一种功能强大且易于学习的编程语言,被广泛应用于网络爬虫和数据挖掘...
    99+
    2024-02-25
    python 数据挖掘 网络爬虫
  • php如何抓取网页数据
    在PHP中,可以使用cURL库来抓取网页数据。cURL(Client URL)是一个用于在PHP中进行网络通信的库,可以发送HTTP...
    99+
    2023-09-15
    php
  • Python如何逆向抓取APP数据
    本篇内容介绍了“Python如何逆向抓取APP数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!所需设备和环境:设备:安卓手机抓包:fidd...
    99+
    2023-06-16
  • 如何使用fiddler对手机APP进行抓包
    这篇文章主要讲解了“如何使用fiddler对手机APP进行抓包”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用fiddler对手机APP进行抓包”吧!fiddler手机抓包原理在本机开...
    99+
    2023-06-05
  • Linux中如何使用wireshark分析tcpdump抓取的数据包
    这篇文章将为大家详细讲解有关Linux中如何使用wireshark分析tcpdump抓取的数据包,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。很多时候我们的系统部署在Linux系统上面,在一...
    99+
    2023-06-06
  • 怎么使用Pandas进行数据读取
    本文小编为大家详细介绍“怎么使用Pandas进行数据读取”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Pandas进行数据读取”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。使用pandas进行数据读取,...
    99+
    2023-07-05
  • Python中如何利用appium抓取app应用数据
    今天就跟大家聊聊有关Python中如何利用appium抓取app应用数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是selenium?Selenium原本是一个用于Web应用...
    99+
    2023-06-02
  • php抓取不到数据如何解决
    这篇文章主要介绍了php抓取不到数据如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php抓取不到数据如何解决文章都会有所收获,下面我们一起来看看吧。php抓取不到数据的解决办法:1、在服务器使用“$pa...
    99+
    2023-07-04
  • 如何使用Python抓取今日头条街拍图片数据
    这篇文章主要介绍了如何使用Python抓取今日头条街拍图片数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。(1)抓取今日头条街拍图片(2)分析今日头条街拍图片结构keywo...
    99+
    2023-06-22
  • 如何使用Node.js进行TCP网络通信
    这篇文章给大家介绍如何使用Node.js进行TCP网络通信,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。摘要: 网络是通信互联的基础,Node.js提供了...
    99+
    2024-04-02
  • 使用python抓取B站数据的方法
    这篇文章给大家分享的是有关使用python抓取B站数据的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述可以获取的数据包括:video-视频模块user-用户模块dynamic-动态模块这次用“Runnin...
    99+
    2023-06-15
  • 如何使用pandas进行数据分析
    这篇文章主要介绍了如何使用pandas进行数据分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。(一)获取微信好友的数据为了获取微信好友的数据,需要使用一个工具,叫itcha...
    99+
    2023-06-19
  • 如何用python抓取链家网二手房数据
    本篇内容介绍了“如何用python抓取链家网二手房数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!# -*- coding: utf-8i...
    99+
    2023-06-04
  • Python如何抓取淘宝IP地址数据
    这篇文章主要介绍Python如何抓取淘宝IP地址数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!示例代码def fetch(ip):    url =&n...
    99+
    2023-06-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作