项目中有这么一个需求,一组植物名词数据,通过调用百度百科查询接口,获取对应名词解释,图片等数据。
根据页面上的内容,选几个准备爬的数据,如别称,图册的图片,功能主治 就这三个
完整实现代码如下:
let cheerio = require('cheerio');
let request = require('request');
let urlencode = require('urlencode');
let fs = require('fs');
// 想要搜索的内容 , 如吊兰
let name = '吊兰';
let utf8 = urlencode(name);
// 百度百科查询接口,中文使用utf8编码处理一下
let url = 'https://baike.baidu.com/item/' + utf8;
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
let data = body;
// 保存页面
fs.writeFile('test.html', body, function(err, res){
if (err) {
console.log(err)
return false;
} else {
console.log('save test.html success')
}
})
// 使用 cheerio 模块解析 获取dom数据
let $ = cheerio.load(data);
let arrayData = [];
let obj = {};
obj['name'] = name;
obj['function'] = '无'
obj['nickName'] = '无'
// 获取 ’别称‘
$('.basic-info dl dd').each(function (i, elem) {
if (i === 2) {
// 别称 这里的内容中有 \n 换行符,做个全局替换
obj['nickName'] = $(elem).text().replace(/\n/g, '');
return false;
}
});
// 获取 ’功能主治‘
$('b').each(function (i, elem) {
if ($(elem).text() === '功能主治') {
obj['function'] = $(elem).parent().next().text().replace(/\n/g, '')
return false;
}
});
// 获取 ’图片‘
let dataSrc = $('.summary-pic img').first().attr('src');
obj['src'] = dataSrc;
console.log(obj)
}
});
程序通过获取对应标签的值保存为一个对象数据,然后打印出来,结果如下
{ name: '吊兰',
function: '化痰止咳;散瘀消肿;清热解毒。主痰热咳嗽;跌打损伤;骨折;痈肿;痔疮;烧伤。用于小儿高热,肺热咳嗽,吐血,跌打肿痛等功效。[1] ',
nickName: '桂兰、葡萄兰、钓兰、树蕉瓜、浙鹤兰、倒吊兰、土洋参、八叶兰等',
src: 'https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/w%3D268%3Bg%3D0/sign=4eaf081be8f81a4c2632ebcfef110764/a5c27d1ed21b0ef459492231dec451da81cb3e3f.jpg' }