最近因为业务需要引入了 font awesome
字体库,准备做一个自选功能,需要用到所有的class,无奈官方的 DOM
结构不合适,于是变想到把所有class爬取下来。整理结构如下
整体数据是一个list数组,每个json
对象的key就是对应模块的名称,json中数组就是该模块所有class
,因为我们自定义了前缀,所以没有官方默认的 fa
前缀,有需要的童鞋可以自己加上。
我爬的是4.7版本,数据 http://pan.baidu.com/s/1qY9JWM4,需要其他版本的可以自己爬取,源码
const request = require('request')
const cheerio = require('cheerio')
const fs = require('fs');
const app = require('express')();
// 首字母大写转换
function firstUpcase (str){
return str.charAt(0).toUpperCase()+str.substring(1);
}
app.get('/',function (err,res,next) {
request('http://www.fontawesome.com.cn/faicons/', (error, response, body) => {
if (error) {
console.log(error)
} else if (response.statusCode == 200) {
const $ = cheerio.load(body)
let allClass = {}
$('#icons > section').each(function () {
// 模块ID
let sectionId = $(this).attr('id');
// 转化ID 中划线为 驼峰风格
let sectionKeyArray = sectionId.split('-');
let sectionKey = '';
for(let i=0,len=sectionKeyArray.length;i<len;i++){
if(i === 0){
sectionKey += sectionKeyArray[i];
}else{
sectionKey += firstUpcase(sectionKeyArray[i])
}
}
// 模块下所有class
let itemClass = []
$(this).find('.fontawesome-icon-list .fa-hover').each(function () {
const iconClass = $(this).find('a').text().replace('Example of', '')
.replace('(alias)', '').trim()
itemClass.push(iconClass)
})
allClass[sectionKey] = itemClass
})
console.log('****************************')
console.log(allClass)
console.log('****************************')
res.send(allClass)
}
})
})
app.listen(3000,function () {
console.log('服务启动成功,端口3000')
})