Node 爬百度百科

项目中有这么一个需求,一组植物名词数据,通过调用百度百科查询接口,获取对应名词解释,图片等数据。


Node 爬百度百科_第1张图片

Node 爬百度百科_第2张图片

根据页面上的内容,选几个准备爬的数据,如别称,图册的图片功能主治 就这三个

完整实现代码如下:

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' }

你可能感兴趣的:(Node 爬百度百科)