websect
- websect是我写的专门用来爬取网页信息数据的工具,里面的API设计和原生的操作dom的API一样,可能你会说,不是已经有cheerio了嘛,不过这个更快,websect的信息爬取速度比cheerio更快,话不多说,直接进入正题:
下载
npm i websect
相关链接
https://www.npmjs.com/package/websect
https://github.com/shataniya/websect
现在进行网页信息的爬取:
- 以小米官网为例
- 要爬取一下商品信息:
var ajax = require("ajax-insect")
var $ = require("websect")
ajax.get("https://www.mi.com").then(data=>{
var old = Date.now()
var arrs = []
$(data).find("a.link.clearfix").each(el=>{
// 获取链接地址
var href = el.href
// 获取图片地址
var src = $(el).find("img").attr("src")
// 获取标题
var text = $(el).find("span").text()
if(href && src && text){
arrs.push({href,src,text})
}
})
// 将数据打印出来,实际上可以不用打印,但是为了直观
console.log(arrs)
// 打印出websect爬取这些信息所用时间,单位是ms
console.log(`websect time is ${Date.now() - old}`)
})
- 以下是测试结果:
- 实际上最快的时候是19ms,最慢的时候有29ms,和网速有点关系,平均一下,就取25ms,换句话说,这个测试 websect的成绩是 25ms,那么如果不打印出数据呢?
- 在不打印数据的情况下,websect 用时 13ms
- 现在轮到 cheerio:
var ajax = require("ajax-insect")
var cheerio = require("cheerio")
ajax.get("https://www.mi.com").then(data=>{
var old = Date.now()
var arrs = []
var $ = cheerio.load(data)
$("a.link.clearfix").each((index,el)=>{
var href = $(el).attr("href")
var src = $(el).find("img").attr("src")
var text = $(el).find("span").text()
if(href && src && text){
arrs.push({href,src,text})
}
})
console.log(arrs)
console.log(`cheerio time is ${Date.now() - old}`)
})
- 以下是测试结果:
- 实际上,最快的时候有108ms,最慢的时候有118ms,但是108ms出现的次数相对比较多所以就以 108ms作为cheerio的成绩,那么如果不打印数据呢?
- 可以看到,在不打印数据的情况下,最快有93ms,最慢有103ms,取个均值为:98.357ms,就取98ms吧
- 对比一下,高下立判,在爬取相同数据量的情况下,cheerio用时98ms,websect用时13ms,实际上,随着数据量的增加,websect 的优势会越来越明显