`
mutongwu
  • 浏览: 448390 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

爬取网站的图片

阅读更多
    var http = require('http');  
    var fs = require('fs');
    var request = require('request');
    var CryptoJS = require('crypto-js');

function decode(code) { 
    code = code.replace(/^eval/, ''); 
    return eval(code); 
} 

function encode(code){
    code = code.replace(/[\r\n]+/g, ''); 
    code = code.replace(/'/g, "\\'"); 
    var tmp = code.match(/\b(\w+)\b/g); 
    tmp.sort(); 
    var dict = []; 
    var i, t = ''; 
    for(var i=0; i<tmp.length; i++) { 
    if(tmp[i] != t) dict.push(t = tmp[i]); 
    } 
    var len = dict.length; 
    var ch; 
    for(i=0; i<len; i++) { 
    ch = num(i); 
    code = code.replace(new RegExp('\\b'+dict[i]+'\\b','g'), ch); 
    if(ch == dict[i]) dict[i] = ''; 
    } 
    return "eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}(" + "'"+code+"',"+a+","+len+",'"+ dict.join('|')+"'.split('|'),0,{}))"; 
}


function downloadPic(url,filePath,fn){
    var r = request(url).pipe(fs.createWriteStream(filePath));
    r.on('close', function(){
        fn();
    }).on('error',function(){
        log('download pic error!');
        if(nextChapterPath && chapterNow < chapterNum){
            downloadChapter(nextChapterPath);
        }else{
            chapterNow++;
        }
    });
}

function downloadFiles(arr,baseDir){
    var length = arr.length;
    var i = 0;
    function loadNext(index){
        downloadPic(encodeURI(picDomain + jsonData.path + arr[i]), baseDir + '/' + index + '.jpg',function(){
            i++;
            if(i < length){
                console.log('Pictrure ' + (index + 1 +  '/' + jsonData.len) + ' done!');
                loadNext(i);
            }else{
                console.log('Chapter ' + jsonData.cname + ' All done!');

                chapterNum++;
                if(chapterNum < maxChapterNum){
                    downloadChapter(chapterNum + '.html');
                }
            }
        });
    }
    loadNext(i);
}



var baseDir = 'F:/node_test/Pictures/';
var picDomain = 'http://somedomain.pic.com';

var dataReg = new RegExp("decryptDES\\(\\'([\\w+/=]+)\\'\\)");
var jsonData = null;

var chapterNum = 154731;
var maxChapterNum = 154743;

function log(data){
    fs.appendFile(baseDir + 'log.txt',data + '\r\n','utf8',function(err){
        if(err)
        {
            console.log(err);
        }
    });
}

function decryptDES(t) {
    var a = CryptoJS.DES.decrypt({
        ciphertext: CryptoJS.enc.Base64.parse(t.substring(8))
    }, CryptoJS.enc.Utf8.parse(t.substring(0, 8)), {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return a.toString(CryptoJS.enc.Utf8);
}

function downloadChapter(path){
    log('//------------------------------------------------------------------//');

    var page = 'http://somepage.url.com/' + path;
    log('正在读取页面:' + page);

    var html = '';  
    http.get(page , function(res) {  
        res.setEncoding('utf-8');  
        res.on('data', function(data) {  
            // collect the data chunks to the variable named "html"  
            html += data;  
        }).on('end', function() {

            var dir = baseDir;
            if(dataReg.test(html)){
                var str = decryptDES(RegExp.$1);
                
                str = str.replace(/^eval/,'');
                str = eval(str);

                log('页面数据:\r\n' + str);
                str = str.replace('var cInfo=','return ');
                //字符串转对象
                jsonData = (new Function(str))();

                dir += jsonData["cname"];
                if (!fs.existsSync(dir)) {
                    fs.mkdirSync(dir);
                    log('文件存放目录:' + dir);
                }else{
                    console.log(dir + ' 已存在!');
                    return;
                }
                downloadFiles(jsonData["files"],dir);

            }else{
                return;
            }
        });  
    });  
}

downloadChapter( chapterNum + '.html');

分享到:
评论

相关推荐

    Node.js-用node爬取网站图片

    标题 "Node.js-用node爬取网站图片" 描述了如何使用Node.js这一流行的JavaScript运行环境来抓取网络上的图片资源。在这个过程中,我们将探讨Node.js的基础知识,HTTP请求库的使用,以及如何处理和保存下载的图片。...

    简单的爬取网站图片的python

    基于python简单的爬取各种网站图片的源代码,简单的爬取网站图片的python

    并发爬取网站图片的DEMO

    在这个名为"并发爬取网站图片的DEMO"的项目中,我们主要关注的是如何使用Python进行并发爬取网络上的图片。这个DEMO旨在为初学者提供一个基础的爬虫实践,帮助他们理解并发编程在爬虫中的应用。下面将详细解释相关...

    一个爬取网站图片的Python爬虫

    自己动手用Python写了一个爬取网站图片的爬虫,用着感觉还行,分享给大家

    爬取网站图片的Python代码

    将网页代码保存为html文件,通过本代码即可爬取出网页中图片的url,对于小白来说十分容易看懂原理,快来下载吧

    python爬取网站图片数据最简单的操作,最详细的讲解

    使用python对网站进行爬取图片信息,讲解非常详细,最全讲解。拥有最详细的讲解、最好的解释、最清晰的思路,这就是我们最纯粹的技术,也是我们的优势,相信这个程序可以为你打开爬虫道路上的一扇窗,也可以为你从...

    python爬虫爬取网站图片

    一个简单的网站图片下载爬虫程序

    Python爬虫实战之爬取网站全部图片三

    此代码是爬取整站的完整代码,运行就可以直接爬完站上所有的图片。 但是以为代码是python2的,如果使用python3的朋友请自行修改相关函数,代码中也有相关的注释。 代码使用多线程进行批量下载 文章地址:...

    Python实现爬取网站图片并下载

    替换网址和存储位置即可使用 实现一个网络爬虫应用程序的编码、调试和运行。并限定只抓取网页中的图片信息。 Python 3.8

    爬虫爬取网站图片并存取到指定目录

    py文件,直接可以运行,可从控制台和Pycharm打开,有详细的注释,基础学习练手的最佳实例

    python爬取百度图片以及图像批量处理

    本教程将聚焦于如何使用Python来爬取百度图片,并进行图像的批量处理,包括调整图片的大小、格式等。首先,我们需要了解Python中的几个关键库:requests、BeautifulSoup和PIL(Python Imaging Library)。 1. **...

    nodejs实现爬取网站图片功能

    在使用Node.js实现爬取网站图片功能的过程中,我们可以了解到几个关键点和相关技术。首先,Node.js是一种基于Chrome V8引擎的JavaScript运行时环境,它非常适合于处理I/O密集型应用,如网络爬虫,因为它可以有效处理...

    爬取百度图片的数据爬取百度图片的数据

    爬取百度图片的数据爬取百度图片的数据

    java爬虫爬取百度图片

    首先,要爬取百度图片,我们需要了解其图片搜索页面的URL结构。通常,百度图片的搜索结果URL会包含关键词参数,例如:`https://image.baidu.com/search/flip?word=关键词&tn=baiduimage&ie=utf-8&fr=aladdin`。这里...

    python爬取百度图片

    python爬取百度图片 使用任意关键字 python爬取百度图片 使用任意关键字 python爬取百度图片 使用任意关键字 python爬取百度图片 使用任意关键字 python爬取百度图片 使用任意关键字 python爬取百度图片

    Python:爬取网站图片

    爬取网站图片: 1. 用 Jupyter Noteboke 打开; 2. 用到了requests库,如百度图片等; 3. json()函数; 4. 二进制格式储存图片;

    爬取图片并保存

    python爬虫爬取网页图片,依据url爬取并将爬取的图片保存在本地

    Java爬取 百度图片&Google图片&Bing图片

    在爬取图片时,我们需要发送GET请求到搜索引擎的图片搜索接口,获取HTML页面内容。 2. **Jsoup**:这是一个非常流行的Java库,用于解析和操作HTML文档。通过Jsoup,我们可以方便地找到HTML中的图片链接,这些链接...

    python爬取搜狗图片,用于物体识别和样本训练

    python爬取搜狗图片,用于物体识别和样本训练 自定义函数def getBaiduImag(category,length,path),用于采集搜狗图片,三个参数分别为搜索的“关键词”category,采集的图片数量length,保存图片的路径path。...

Global site tag (gtag.js) - Google Analytics