nodejs实现简单爬虫爬取http://web.jobbole.com/网址数据

284 阅读1分钟

node实现简单的爬虫

一、基本环境

  • 1、window7
  • 2、node8.9.3

二、环境搭建

  • 1、新建一个文件并在文件中的黑窗口中执行

    npm init --yes
    
  • 2、安装依赖包

    yarn add cheerio // Node.js 版的jQuery
    yarn add iconv-lite // 处理网站编码的问题
    yarn add mysql // 非必须的,只是存入mysql数据库
    

三、实现简单的抓取网页上的数据

  • 1、核心代码

    var cheerio = require('cheerio');
    var http = require('http');
    var iconv = require('iconv-lite');
    var fs = require('fs');
    // 设置需要抓取的网页
    var url = 'http://www.jobbole.com/';
    
    http.get(url, function(sres) {
      var chunks = [];
      sres.on('data', function(chunk) {
        chunks.push(chunk);
      });
      sres.on('end', function() {
        // 定义一个临时存储数据的字段
        var result = {
          news: [],
          web: []
        };
        // 设置编码
        var html = iconv.decode(Buffer.concat(chunks), 'utf-8');
        // 使用类似jq的选择器
        var $ = cheerio.load(html, {decodeEntities: false});
        $('#widgets-homepage-fullwidth > div:nth-child(3) .grid-4').each((idx, element) => {
          var $element = $(element);
          $element.find('.floated-thumb').each(function(index, ele) {
            var url = $(ele).find('.post-thumb > a > img').attr('src');
            var title = $(ele).find('.post-meta .meta-title').text();
            result.news.push({
              imgUrl: url,
              title: title
            });
          });
        });  
        // 获取web数据
        $('#widgets-homepage-fullwidth > div:nth-child(7) > .floated-thumb').each((index, ele) => {
          var imgUrl = $(ele).find('.post-thumb > a > img').attr('src');
          var text = $(ele).find('.post-meta > p > a.meta-title').text();
          result.web.push({
            imgUrl: imgUrl,
            text: text
          });
        });
        // 把数据写入到本地
        fs.writeFile('./11.json', JSON.stringify(result, null, 2), { 'flag': 'w+' }, (error) => {
          if (error) {
            console.error('错误');
          }
          console.info('成功');
        });   
      });
    });
    
  • 2、上面使用类似jq的选择器中选择器可以使用下面方式复制

打开浏览器控制台->elements->右键->copy->copy selector

  • 3、参考代码(main1.js)

四、将爬取的数据存入数据库中,参考代码(main2.js)

五、分页抓取数据,参考代码(main3.js)

六、参考代码