基于node的简易爬虫

一、建立工程目录

使用cmd命令:

建一个根目录文件夹:mkdir spider

建一个保存文章内容文件夹: mkdir data

建一个保存图片资源文件夹: mkdir image

以及spider.js文件

二、安装包

cd spider 进入根目录

npm init 初始化项目,若不需要特别配置,可一路回车

npm install cheerio --save

npm install request --save

说明:由于http模块、fs模块都是内置的包,因此不需要额外添加。

三、写代码

代码都是在根目录下spider.js中

var http = require('http');
var fs = require('fs');
var cheerio = require('cheerio');
var request = require('request');

var url = 'http://www.hsu.edu.cn/34/28/c24a78888/page.htm' // 文章的链接地址

// 获取文章信息
function getArticle(url) {
  // 使用http模块向服务器发起一次get请求
  http.get(url, function(res) {
  var html = ''; // 保存请求的页面整个html内容
  res.setEncoding('utf-8'); // 防止中文乱码
  // 监听data事件,获取每块的数据
  res.on('data', function(chunk) {
    html += chunk;
  })
  // 监听end事件,当请求的网页内容全部获取完毕,执行回调函数
  res.on('end', function(err) {
    var $ = cheerio.load(html); // 采用cheerio模块解析html
    var news_item = {
      title: $('.arti_title').text(),
      arti_publisher: $('.arti_publisher').text().split(':')[1],
      author: $('.arti_views').text().split(':')[2],
      time: $('.arti_update').text().split(':')[1]
    }
    news_item.title = news_item.title.substring(0, 8); //截取标题部分内容作为文件名
    // 保存每篇文章的内容
        saveContent($, news_item.title);
        // 保存文章图片
        saveImg($, news_item.title);
  })
})
}

// 保存文章内容
function saveContent($, title) {
  $('.wp_articlecontent p').each(function(index, item) {
    var text = $(item).text(); // 获取每段的内容
    if (text.substring(0, 2).trim() == '') { // 通过判断获取的每段内容前面是否有空格来确定是文章内容还是图片标题
      text = text + '\n'; // 每段文章需要换行

      // 在同一文件中添加每段的内容
      fs.appendFile('./data/' + title + '.txt', text, 'utf-8', function(err) {
        if (err) {
          console.log(err)
        }
      })
    }
  })
}

// 保存图片资源
function saveImg($, title) {
  $('.wp_articlecontent img').each(function(index, item) {
    var img_title = $(item).parents().next().text(); // 图片标题
    var img_filename = img_title.substring(0, 8) + '.jpg'; // 图片文件名
    var img_url = 'http://www.hsu.edu.cn' + $(item).attr('src'); // 图片请求路径
    // 通过流的方式,写入文件
    request.head(img_url, function(err, res, body){
      if (err) {
        console.log(err)
      }
    })
    request(img_url).pipe(fs.createWriteStream('./image/' + img_filename));
  })
}
getArticle(url);
使用node spider.js运行查看效果

附上代码图

转载于:https://www.cnblogs.com/jefferyE/p/7053219.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值