Node.js 实现简单爬虫

server/2025/2/11 16:27:26/

介绍

爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
本文将使用 Nodejs 编写一个简单的爬虫脚本,爬取一个美食网站,获取菜品的标题和图片链接,并以表格的形式输出。

准备工作

1、初始化项目

首先,确保已安装 Node,然后创建一个新的文件目录,运行以下命令初始化 Node.js 项目

npm init -y

2、安装依赖

使用 axios 库来进行 HTTP 请求
使用 cheerio 库来解析 HTML 内容
使用 node-xlsx 库来将数据写入 Excel 文件

npm install axios cheerio node-xlsx --save

代码实现

1、创建爬虫脚本

在项目根目录下创建一个 crawler.js 文件,并写入以下代码

import axios from "axios";
import cheerio from "cheerio";// 目标网页的URL,这里使用 下厨房 这个美食网站作为测试
const targetUrl = "https://www.xiachufang.com/category/40076/";// 请求目标网页,获取HTML内容
const getHtml = async () => {const response = await axios.get(targetUrl);if (response.status !== 200) {throw new Error("请求失败");}return response.data;
};// 解析HTML内容,获取菜品的标题和图片链接
const getData = async (html) => {const $ = cheerio.load(html);const list = [];$(".normal-recipe-list li").each((i, elem) => {const imgUrl = $(elem).find("img").attr("src");const title = $(elem).find("p.name a").text();list.push({title: title.replace(/[\n\s]+/g, ""),imgUrl,});});return list;
};

2、以 Excel 表格形式保存数据

import xlsx from "node-xlsx";
import fs from "fs";// 根据 表头数据 和 列表数据 转换成二维数组
const transData = (columns, tableList) => {const data = columns.reduce((acc, cur) => {acc.titles.push(cur.header);acc.keys.push(cur.key);return acc;},{ titles: [], keys: [] });const tableBody = tableList.map((item) => {return data.keys.map((key) => item[key]);});return [data.titles, ...tableBody];
};const writeExcel = (list) => {// 表头const columns = [{ header: "菜名", key: "title" },{ header: "图片链接", key: "imgUrl" },];// 构建表格数据const tableData = transData(columns, list);const workbook = xlsx.build([{name: "菜谱",data: tableData,},]);// 写入文件fs.writeFileSync("./菜谱.xlsx", workbook, "binary");
};

3、执行

(async () => {const html = await getHtml();const list = await getData(html);await writeExcel(list);console.log("执行完毕");
})();

运行爬虫

在终端中运行以下命令来执行爬虫代码

node crawler.js

效果图

Effect Picture

总结

通过学习这个简单的示例,您可以进一步探索更复杂的爬虫应用,处理更多类型的网页和数据,并加入更多功能来实现您自己的爬虫项目。


http://www.ppmy.cn/server/166416.html

相关文章

神经网络的数据流动过程(张量的转换和输出)

文章目录 1、文本从输入到输出,经历了什么?2、数据流动过程是张量,如何知道张量表达的文本内容?3、词转为张量、张量转为词是唯一的吗?为什么?4、如何保证词张量的质量和合理性5、总结 🍃作者介…

DeepSeek模拟阿里面试官——java基础(面向对象)

作为一位阿里高级Java程序员面试官,我会围绕Java面向对象编程的核心概念、实际应用以及设计原则设计问题,以全面评估候选人的理解和应用能力。以下是可能的面试问题: 基本概念与实现方式 请解释Java中封装、继承、多态的基本概念及其在Java中…

lxml 教程:Python 中高效处理 XML 和 HTML 的利器

一、引言 在 Python 开发中,经常需要处理 XML 和 HTML 数据,如网页数据抓取、配置文件解析等。lxml 是一个功能强大且高效的库,它基于 libxml2 和 libxslt 库,提供了简洁易用的 API 来处理 XML 和 HTML 文档。本教程将详细介绍 l…

Python(Pandas)数据分析学习

1.Pandas基本构成 引入Pandas import pandas as pd 1.Series 行 对应Excel中的一行数据,一维数据 定义Series # 第一个参数是具体数据 # 第二个参数的对应的索引下标 # 第三个参数的行名称 data pd.Series([1,2,3,4,5], index[a,b,c,d,e], namedata) print(d…

edu小程序挖掘严重支付逻辑漏洞

edu小程序挖掘严重支付逻辑漏洞 一、敏感信息泄露 打开购电小程序 这里需要输入姓名和学号,直接搜索引擎搜索即可得到,这就不用多说了,但是这里的手机号可以任意输入,只要用户没有绑定手机号这里我们输入自己的手机号抓包直接进…

Maven概述与安装

目录 Maven 概述 1. 什么是 Maven 2. Maven 的主要功能 3. Maven 的优势 Maven 安装 1. 系统要求 2. 下载 Maven 3. 解压 Maven 4. 配置环境变量 Windows 系统 1.配置环境变量: 2.验证安装: Linux 系统 1. 打开终端窗口 2. 打开 .bashrc 文…

理解UML中的四种关系:依赖、关联、泛化和实现

在软件工程中,统一建模语言(UML)是一种广泛使用的工具,用于可视化、设计、构造和文档化软件系统。UML提供了多种图表类型,如类图、用例图、序列图等,帮助开发者和设计师更好地理解系统的结构和行为。在UML中…

day 40 复习makefile以及51单片机

1.makefile 1.流程 1.将源文件和头文件以及库分别放在src include lib中 2.在源码目录下创建一个名为makefile的文件 3.编写makefile代码。 4.make编译 2.怎么编写代码 通过定义变量 将gcc main.c tree.c queue.c -o app -lm -lpthread 转换 1.定义变量(所有变…