基于nodejs的网络图片爬虫

                       

这是我研究nodejs爬虫后写的一个图片爬虫小例子。不过功能还是挺强大的可以将你喜欢的图片下载下来。
主要的爬虫代码:

//var http = require('https');var http = require('http');var fs = require('fs');var cheerio = require('cheerio');var request = require('request');//设置循环var i = 0;//初始url var url = "http://m.juyouqu.com/qu/3187982"; function startSpider(x) {    console.log('向目标站点发送请求');    //采用http模块向服务器发起一次get请求          http.get(x, function (res) {             var html = '';        //用来存储请求网页的整个html内容        var titles = [];                res.setEncoding('utf-8'); //防止中文乱码        //监听data事件,每次取一块数据        res.on('data', function (chunk) {               html += chunk;            //console.log(chunk)        });        //监听end事件,如果整个网页内容的html都获取完毕,就执行回调函数        res.on('end', function () {         var $ = cheerio.load(html); //采用cheerio模块解析html         //console.log('html',html)         var news_item = {            //获取文章的标题            title: $('.item-title').text().trim(),            imgSrc: $('.post-container img').attr('src'),            link: $(".button").attr('href'),//            //i是用来判断获取了多少篇文章            i: i = i + 1,                 };        console.log(news_item);        var news_title = $('.item-title').text().trim();        savedImg($,news_title);    //存储每篇文章的图片及图片标题        //下一篇文章的url        var nextLink="http://m.juyouqu.com" + $(".button").attr('href');        //这是亮点之一,通过控制I,可以控制爬取多少篇文章.        if (i <= 10) {                            setTimeout(function(){                startSpider(nextLink);            },300)        }        });    }).on('error', function (err) {        console.log(err);    });}//该函数的作用:在本地存储所爬取到的图片资源function savedImg($,news_title) {    $('.post-container img').each(function (index, item) {        var img_title = news_title+index;        var img_filename = img_title + '.jpg';        var img_src = $(this).attr('src'); //获取图片的url        //采用request模块,向服务器发起一次请求,获取图片资源        request.head(img_src,function(err,res,body){            if(err){                console.log(err);            }        });        request(img_src).pipe(fs.createWriteStream('./image/'+news_title + '---' + img_filename));     //通过流的方式,把图片写到本地/image目录下,并用新闻的标题和图片的标题作为图片的名称。    })}startSpider(url);      //主程序开始运行
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

运行的截图:
这里写图片描述
获得的图片:
这里写图片描述
如果看不懂,或者配置不了的话,可以下载我的资源包,整个项目的完整代码我都放上去了。
这是资源地址
(解压后,如果node_modules里面你文件路径与你电脑的路径不符,你可以删除了node_modules这个文件然后在运行一下npm install就可以了)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值