本文主要是介绍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 爬虫上手体验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!