Node.js使用Cheerio實(shí)現(xiàn)輕量級(jí)網(wǎng)頁(yè)數(shù)據(jù)提取
一、什么是Cheerio?
Cheerio是一個(gè)用于在Node.js上快速、靈活地進(jìn)行HTML解析、操作和遍歷的庫(kù)。它使用jQuery的核心選擇器和方法,可以理解為在Node.js上對(duì)服務(wù)器端的HTML進(jìn)行操作的jQuery。相對(duì)于其他復(fù)雜的爬蟲框架,Cheerio更加輕量,適合用于靜態(tài)頁(yè)面的內(nèi)容提取。
為什么選擇Cheerio?
- 簡(jiǎn)單易用:傾向jQuery的語法,對(duì)前端開發(fā)者非常友好。
- 快速高效:不需要加載瀏覽器環(huán)境,因此比一般爬蟲框架更輕量。
- 靈活自由:提供了靈活的DOM操作能力,能夠適應(yīng)多種網(wǎng)頁(yè)結(jié)構(gòu)。
二、環(huán)境搭建和基礎(chǔ)使用
1. 安裝Node.js和Cheerio
首先,你需要在你的計(jì)算機(jī)上安裝Node.js。這是Cheerio的運(yùn)行環(huán)境。
使用npm安裝Cheerio:
npm install cheerio
2. 基本使用示例
讓我們從一個(gè)基本的使用示例開始。假設(shè)你有以下HTML:
<head>
<title>Cheerio Example</title>
</head>
<body>
<div id="content">
<h1>Cheerio Tutorial</h1>
<p>This is a simple tutorial for Cheerio.</p>
<a >Example Link</a>
</div>
</body>
使用Cheerio解析并獲取數(shù)據(jù):
const cheerio = require('cheerio');
// 模擬一個(gè)HTML頁(yè)面
const html = `
<div id="content">
<h1>Cheerio Tutorial</h1>
<p>This is a simple tutorial for Cheerio.</p>
<a >Example Link</a>
</div>
`;
// 加載HTML文檔
const $ = cheerio.load(html);
// 提取標(biāo)題
const title = $('#content h1').text();
console.log('Title:', title);
// 提取文本段落
const description = $('#content p').text();
console.log('Description:', description);
// 提取鏈接URL
const link = $('#content a').attr('href');
console.log('Link:', link);
三、進(jìn)階操作
選擇器和DOM操作
Cheerio支持多種選擇器:
- 元素選擇器:
$('div')選擇所有<div>元素。 - ID選擇器:
$('#content')選擇ID為content的元素。 - 類選擇器:
$('.class-name')選擇所有具有指定類的元素。 - 屬性選擇器:
$('a[href="https://example.com"]')選擇具有指定屬性的元素。
你可以像操作jQuery一樣操作DOM:
// 修改文本內(nèi)容
$('#content p').text('Updated text content');
// 添加新元素
$('#content').append('<p>Added a new paragraph.</p>');
四、實(shí)戰(zhàn)示例:簡(jiǎn)單爬蟲
假設(shè)你要抓取某個(gè)網(wǎng)易云音樂的超鏈接里面的title和href屬性,以下是一個(gè)簡(jiǎn)單的示例:
const axios = require('axios');
const cheerio = require('cheerio');
// 定義抓取函數(shù)
const scrapeNews = async () => {
try {
const response = await axios.get('https://music.163.com/#');
let html = response.data;
//console.log(html)
const $ = cheerio.load(html);
$('a').each((index, element) => {
//const title = $(element).text();
const title = $(element).attr('title');
const link = $(element).attr('herf');
console.log(`Title: ${title}`);
console.log(`Link: ${link}`);
console.log('------------------------');
});
} catch (error) {
console.error('Error fetching news:', error);
}
};
// 執(zhí)行抓取
scrapeNews();
在這個(gè)例子中,我們使用axios進(jìn)行HTTP請(qǐng)求以獲取HTML頁(yè)面。這是因?yàn)镃heerio本身不提供網(wǎng)絡(luò)請(qǐng)求功能,它專注于HTML的解析。
到此這篇關(guān)于Node.js使用Cheerio實(shí)現(xiàn)輕量級(jí)網(wǎng)頁(yè)數(shù)據(jù)提取的文章就介紹到這了,更多相關(guān)Node.js網(wǎng)頁(yè)數(shù)據(jù)提取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Node.js中開發(fā)樹形結(jié)構(gòu)接口的實(shí)現(xiàn)
本文介紹了Node.js中開發(fā)樹形結(jié)構(gòu)接口的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
Node.js 實(shí)現(xiàn)簡(jiǎn)單的無侵入式緩存框架的方法
這篇文章主要介紹了Node.js 實(shí)現(xiàn)簡(jiǎn)單的無侵入式緩存框架的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
Windows系統(tǒng)下Node.js安裝以及環(huán)境配置的完美教程
相信對(duì)于很多關(guān)注javascript發(fā)展的同學(xué)來說,nodejs已經(jīng)不是一個(gè)陌生的詞眼,下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下Node.js安裝以及環(huán)境配置的完美教程,需要的朋友可以參考下2022-06-06
Lua表達(dá)式和控制結(jié)構(gòu)學(xué)習(xí)筆記
這篇文章主要介紹了Lua表達(dá)式和控制結(jié)構(gòu)學(xué)習(xí)筆記,本文講解了算術(shù)操作符、關(guān)系操作符、邏輯操作符、局部變量與作用域、控制結(jié)構(gòu)等內(nèi)容,需要的朋友可以參考下2014-12-12
Node.js使用Playwright自動(dòng)化測(cè)試頁(yè)面性能
對(duì)于現(xiàn)在的網(wǎng)站而言,性能的重要性不言而喻,本文將使用Playwright自動(dòng)化測(cè)試頁(yè)面性能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
如何在node環(huán)境實(shí)現(xiàn)“get數(shù)據(jù)解析”代碼實(shí)例
這篇文章主要介紹了如何在node環(huán)境實(shí)現(xiàn)“get數(shù)據(jù)解析”代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
express中創(chuàng)建 websocket 接口及問題解答
本文主要介紹了express中創(chuàng)建 websocket 接口及問題解答,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05

