Node.js?實現(xiàn)簡單爬蟲的示例代碼
介紹
爬蟲是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本。
本文將使用 Nodejs 編寫一個簡單的爬蟲腳本,爬取一個美食網(wǎng)站,獲取菜品的標(biāo)題和圖片鏈接,并以表格的形式輸出。
準(zhǔn)備工作
1、初始化項目
首先,確保已安裝 Node,然后創(chuàng)建一個新的文件目錄,運行以下命令初始化 Node.js 項目
npm init -y
2、安裝依賴
使用 axios 庫來進行 HTTP 請求
使用 cheerio 庫來解析 HTML 內(nèi)容
使用 node-xlsx 庫來將數(shù)據(jù)寫入 Excel 文件
npm install axios cheerio node-xlsx --save
代碼實現(xiàn)
1、創(chuàng)建爬蟲腳本
在項目根目錄下創(chuàng)建一個 crawler.js
文件,并寫入以下代碼
import axios from "axios"; import cheerio from "cheerio"; // 目標(biāo)網(wǎng)頁的URL,這里使用 下廚房 這個美食網(wǎng)站作為測試 const targetUrl = "https://www.xiachufang.com/category/40076/"; // 請求目標(biāo)網(wǎng)頁,獲取HTML內(nèi)容 const getHtml = async () => { const response = await axios.get(targetUrl); if (response.status !== 200) { throw new Error("請求失敗"); } return response.data; }; // 解析HTML內(nèi)容,獲取菜品的標(biāo)題和圖片鏈接 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 表格形式保存數(shù)據(jù)
import xlsx from "node-xlsx"; import fs from "fs"; // 根據(jù) 表頭數(shù)據(jù) 和 列表數(shù)據(jù) 轉(zhuǎn)換成二維數(shù)組 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" }, ]; // 構(gòu)建表格數(shù)據(jù) const tableData = transData(columns, list); const workbook = xlsx.build([ { name: "菜譜", data: tableData, }, ]); // 寫入文件 fs.writeFileSync("./菜譜.xlsx", workbook, "binary"); };
3、執(zhí)行
(async () => { const html = await getHtml(); const list = await getData(html); await writeExcel(list); console.log("執(zhí)行完畢"); })();
運行爬蟲
在終端中運行以下命令來執(zhí)行爬蟲代碼
node crawler.js
效果圖
總結(jié)
通過學(xué)習(xí)這個簡單的示例,您可以進一步探索更復(fù)雜的爬蟲應(yīng)用,處理更多類型的網(wǎng)頁和數(shù)據(jù),并加入更多功能來實現(xiàn)您自己的爬蟲項目。
到此這篇關(guān)于Node.js 實現(xiàn)簡單爬蟲的示例代碼的文章就介紹到這了,更多相關(guān)Node.js 爬蟲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
30分鐘用Node.js構(gòu)建一個API服務(wù)器的步驟詳解
這篇文章主要介紹了30分鐘用Node.js構(gòu)建一個API服務(wù)器的步驟詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05Node.js和MongoDB實現(xiàn)簡單日志分析系統(tǒng)
這篇文章主要介紹了Node.js和MongoDB實現(xiàn)簡單日志分析系統(tǒng),本文給出了服務(wù)器端、客戶端、圖表生成、Shell自動執(zhí)行等功能的實現(xiàn)代碼,需要的朋友可以參考下2015-04-04Node.js?中使用fetch?按JSON格式發(fā)post請求的問題解析
最近在測試一個api,可以用curl命令直接訪問,指定header相關(guān)配置,request?body(JSON),成功后返回一個JSON,這篇文章主要介紹了Node.js?中使用fetch?按JSON格式發(fā)post請求,需要的朋友可以參考下2023-04-04node.js express JWT token生成與校驗的實現(xiàn)
本文主要介紹了node.js express JWT token生成與校驗的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12Node+Express搭建HTTPS服務(wù)的實現(xiàn)
最近開發(fā)需要搭建一個https的服務(wù),正好最近在用nodejs和express,本文章主要介紹了Node+Express搭建HTTPS服務(wù)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-12-12