本文主要是介绍node cheerio 爬虫上手体验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
cheerio是为服务器特别定制的,快速、灵活的jQuery核心实现.
安装
npm i cheerio
特点
- 相似的语法:
cheerio实现了核心jQuery的子集。cheerio会从jQuery库中删除所有DOM矛盾和浏览器的尴尬部分,展示她真正华丽的API。 - 非常快:
cheerio使用一个非常简单的、一致的DOM模型。作为一个结果分析、处理和呈现的工具非常有效。基础的端到端基准测试显示其速度是JSDOM的8倍。 - 非常的灵活:
cheerio基于htmlparser2。cheerio可以解析几乎任何HTML或XML文档。
使用
首先你需要加载HTML,jQuery的这一步是必须的,因为一个jQuery运行,常用DOM。在cheerio中,我们需要把HTML document传进去。
var cheerio = require('cheerio'),
$ = cheerio.load('<ul id="fruits">...</ul>');
如果你需要修改默认的解析选项你也可以传一个额外的对象给.load():
$ = cheerio.load('<ul id="fruits">...</ul>', {normalizeWhitespace: true,xmlMode: true
});
这些解析选项直接取自htmlparser2,因此也可以在cheerio中使用任何在htmlparser2中有效的选项。默认的选项是:
{normalizeWhitespace: false,xmlMode: false,decodeEntities: true
}
抓取求书网例子
npm i axios cheerio
const axios = require("axios");
const cheerio = require("cheerio");
const baseURL = "http://www.aidusk.org/";/*** 获取页面html* @param {String} url 路径* @param {Object} params 参数*/
async function getPage(url = "", params = {}) {const { data } = await axios({ method: "get", url: baseURL + url, params });const page = cheerio.load(data);return page;
}/*** 按关键词查询* @param {String} keyword 关键词*/
async function search(keyword) {const $ = await getPage("search.php", { searchkey: keyword });const listNode = $(".read_list li");return listNode.toArray().map((item) => {// 小说封面图const coverImg = $(item).find(".pic img").attr("src");const [t1, t2, t3] = $(item).find(".w1").children().get();// 小说idconst id = $(t1).find(".c1").attr("href").replace(/[^\d]/g, "");// 小说名const name = $(t1).find(".c1").text().replace(/[《》]/g, "");// 小说作者和更新时间const [author, updateDate] = $(t2).text().split(" ").map((item) => item.split(":")[1]);// 小说描述const desc = $(t3).text().replace(/\s/g, "");return {id,name,coverImg,desc,author,updateDate,};});
}search("天蚕土豆").then((res) => {console.log(res);
});
打印
这篇关于node cheerio 爬虫上手体验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!