为什么下面的爬虫程序跑着跑着就停住?不下载了?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论