为什么下面的爬虫程序跑着跑着就停住?不下载了?

发布于 2022-09-04 21:37:59 字数 3086 浏览 22 评论 0

var http = require('http');

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

var allDownCount=0;//总成功下载数

var allPicutureCount=0;//找到的所有图片的数量

var urlArray=[
  {prefix:'http://blog.sina.com.cn/s/articlelist_2961498323_1_',postfix:'.html',count:2},
  {prefix:'http://blog.sina.com.cn/s/articlelist_1662684653_0_',postfix:'.html',count:5}
];

for(var i=0;i<urlArray.length;i++){
    var obj=urlArray[i];
    if(i>0){
      setTimeout(function () {
        requestListUrl(obj);
      }, 10*1000);
    }else {
      requestListUrl(obj);
    }


}
//遍历传入的URl列表,先加载列表页面,在里面找出所有详情页面,再选出其中所有图片,并下载
function requestListUrl(obj) {
    var count=obj.count;
    for(var j=0;j<count;j++){
        var url=obj.prefix+(j+1)+obj.postfix;
        startRequest(url,getListNewPage);
    }
}


//var requestUrl='http://blog.sina.com.cn/u/2961498323';//修改这个地址可以

//直接请求列表页。通过列表页找到所有
//startRequest(requestUrl,getListPage);

//下载所有详情页里面的图片
function downloadAllDetailPictures($) {
    var pcount=$('div.articalContent').find('img').length;//本详情页的图片数
    allPicutureCount+=pcount;
    console.log('目前找到的图片数:'+allPicutureCount);
    //遍历所有图片 下载
    $('div.articalContent').find('img').each(function (){
        var src=$(this).attr('real_src');//下载的URL
        //console.log(src);
        var fileName=Math.random()*100000000+'';//修改文件名
        var index=fileName.indexOf('.');
        if(index>0){
          fileName=fileName.substring(0,index);//将多余的.后面的数字去掉
        }
        fileName+=".jpg";
        var downPath='./images/'+fileName;//文件保存的路径
        //通过流的方式,把图片写到本地/images目录下,并用新闻的标题和图片的标题作为图片的名称。
        try {
          download(src,downPath);
        } catch (e) {

        } finally {

        }



    });
}
//正式下载图片
function download(url,downPath) {
  request({uri: url, encoding:'binary',timeout:10*1000}, function (error, response, body) {
      if (!error && response.statusCode == 200) {
          fs.writeFile(downPath, body,'binary', function (err) {
                if (err) {
                  console.log(err);
                  return;
                }
                allDownCount++;
                console.log('成功下载'+allDownCount+'个文件');
          });
      }
  });
}
//最新获取最新页
function getListNewPage($) {
    $('div.articleList a').each(function() {
        var item=$(this).attr('href');
        console.log('请求详情页:'+item);
        startRequest(item,downloadAllDetailPictures);
    });
}

//获取新浪列表页
function getListPage($) {
   var detailPages=$('.blog_title a');//获取所有列表Html地址
   detailPages.each(function () {
      var item=$(this).attr('href');
      console.log('请求详情页:'+item);
      startRequest(item,downloadAllDetailPictures);
   });
}


//请求一次html,并回调函数
function startRequest(x,callBack) {
   http.get(x,function(res){
     var html='';
     res.setEncoding('utf-8');
     res.on('data',function (chunk){
       html+=chunk;
     });
     res.on('end',function () {
       var $=cheerio.load(html);
       callBack($);
     });

   });
}




需要安装cheerio 和request,可以运行一下看看。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文