如何使用Cheerio(Node.js)逐个抓取指定HTML内容?
用Cheerio(Node.js环境)逐个抓取目标内容的方法
嘿,这事儿不难,我给你捋清楚步骤,直接上干货:
第一步:准备依赖
首先确保你已经在Node.js项目里装了Cheerio(解析HTML用)和axios(用来获取页面内容,如果是本地HTML文件的话可以换成fs模块),执行下面的命令安装:
npm install cheerio axios
第二步:编写抓取代码
假设你已经拿到了目标HTML内容(不管是通过axios请求远程页面,还是本地读取的),可以这样写代码逐个抓取每个genreitem里的链接和文本:
const cheerio = require('cheerio'); const axios = require('axios'); // 示例:如果是远程页面,先获取HTML;如果是本地内容,直接把HTML字符串赋值给html变量 async function scrapeGenreItems() { try { // 这里替换成目标页面的URL,或者直接写你的HTML字符串 const response = await axios.get('目标页面URL'); const html = response.data; // 加载HTML到Cheerio const $ = cheerio.load(html); // 逐个抓取.genreitem下的a标签内容 $('.genreitem a').each((index, element) => { // 获取文本内容 const itemText = $(element).text().trim(); // 获取链接地址 const itemLink = $(element).attr('href'); // 这里可以把结果存起来,或者直接打印 console.log(`第${index+1}个项目:文本=${itemText},链接=${itemLink}`); }); } catch (error) { console.error('抓取过程出错了:', error); } } // 调用函数 scrapeGenreItems();
针对你给的截断源码的说明
你提供的源码最后一个.genreitem里的a标签没闭合,实际抓取时如果遇到这种不规范的HTML,Cheerio一般也能自动修复,不用太担心。
如果你的HTML是本地字符串,不需要axios的话,可以改成这样:
const cheerio = require('cheerio'); const html = ` <div class="textbox"> <div class="boxtitle">Theme</div> <div class="genreitem"><a href="link">Cat</a></div> <div class="genreitem"><a href="link">Dog</a></div> <div class="genreitem"><a href="link">Zebra</a></div> <div class="genreitem"><a href="link">Giraffe</a></div> <div class="genreitem"><a href="link">...</a></div> `; const $ = cheerio.load(html); $('.genreitem a').each((index, element) => { const text = $(element).text().trim(); const link = $(element).attr('href'); console.log(`${index+1}: ${text} -> ${link}`); });
这样就能逐个把每个分类项的文本和链接都抓出来啦~
内容的提问来源于stack exchange,提问作者sinusGob
相关产品推荐
相关产品推荐

