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

爬取网站的图片之一

阅读更多
    var http = require('http');  
    var fs = require('fs');
    var request = require('request');

function base64_decode (data) {
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = "", tmp_arr = [];
    if (!data) {return data;}
    data += '';
    do { 
        h1 = b64.indexOf(data.charAt(i++));
        h2 = b64.indexOf(data.charAt(i++));
        h3 = b64.indexOf(data.charAt(i++));
        h4 = b64.indexOf(data.charAt(i++));
        bits = h1<<18 | h2<<12 | h3<<6 | h4;
        o1 = bits>>16 & 0xff;
        o2 = bits>>8 & 0xff;
        o3 = bits & 0xff;
        if (h3 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1);
        } else if (h4 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1, o2);
        } else {
            tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
        }
    } while (i < data.length);
    dec = tmp_arr.join('');
    dec = utf8_decode(dec);
    return dec;
}
function base64_encode (data) {
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = [];
    if (!data){return data;}
    data = utf8_encode(data+'');
    do {
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);
        bits = o1<<16 | o2<<8 | o3;
        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);
    enc = tmp_arr.join('');
    switch (data.length % 3) {
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }
    return enc;
}
function utf8_decode ( str_data ) {
    var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;
    str_data += '';
    while ( i < str_data.length ) {
        c1 = str_data.charCodeAt(i);
        if (c1 < 128) {
            tmp_arr[ac++] = String.fromCharCode(c1);
            i++;
        } else if ((c1 > 191) && (c1 < 224)) {
            c2 = str_data.charCodeAt(i+1);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i+1);
            c3 = str_data.charCodeAt(i+2);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
    return tmp_arr.join('');
}

function utf8_encode ( argString ) {
    var string = (argString+''); 
    var utftext = "";
    var start, end;
    var stringl = 0;
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
        if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
    return utftext;
}


var counter = 0;
var totalNum = 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(arr[i], baseDir + '/' + index + '.jpg',function(){
            i++;
            if(i < length){
                loadNext(i);
            }else{
                console.log('Chapter ' + chapterNow + ' All done!');
                chapterNow++;
                if(nextChapterPath && chapterNow < chapterNum){
                    downloadChapter(nextChapterPath);
                }
            }
        });
    }
    loadNext(i);
}



var baseDir = 'F:/node_test/Pictures/';

var urlReg = new RegExp('qTcms_S_m_murl_e\\s*=\\s*"([\\w+/=]+)"');
var isUrlReg = /^http:\/\//;
var chapterReg = new RegExp('qTcms_S_m_playm\\s*=\\s*"\\W+(\\d+)\\W+"');
var nextChapterReg = new RegExp('qTcms_Pic_nextArr\\s*=\\s*"([/\\w.])html"');

var chapterNow = 0,
    chapterNum = 10;
var nextChapterPath = '';

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



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

    var page = 'http://some.page.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(chapterReg.test(html)){
                dir +=  '第' + RegExp.$1 + '话';
            }else{
                console.log('找不到章节');
                return;
            }
            if (!fs.existsSync(dir)) {
                fs.mkdirSync(dir);
            }else{
                console.log(dir + ' 已存在!');
                return;
            }
            //
            log('文件存放目录:' + dir);

            var nextChapterReg = new RegExp('qTcms_Pic_nextArr\\s*=\\s*"([/\\w.]+)"');
            if(nextChapterReg.test(html)){
                nextChapterPath = RegExp.$1;
                log('下一个页面地址:' + nextChapterPath);
            }else{
                nextChapterPath = null;
            }

            var url64 = null,
                picArr = null;
            if(urlReg.test(html)){

                url64 = base64_decode (RegExp.$1);

                log('图片数组:\r\n' + url64);

                picArr = url64.split('$');
                picArr =  picArr.filter(function(val){
                    return isUrlReg.test(val);
                });


                downloadFiles(picArr,dir);
            }else{
                //console.log("not found.");
                console.log(html);
            }
        });  
    });  
}

downloadChapter('someurl');
分享到:
评论

相关推荐

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

    这个压缩包文件"Python爬虫实战之爬取网站全部图片.rar"提供了一个实战案例,教你如何使用Python来批量下载一个网站上的所有图片。下面我们将深入探讨相关的知识点。 首先,我们需要了解Python中的几个关键库,它们...

    Node.js-node.js学习代码一个是爬取图片到本地

    第一个实例是关于爬取图片到本地。在这个过程中,你会接触到Node.js的核心模块之一——`http`,它提供了HTTP客户端的功能,可以用来发送HTTP请求到指定的URL获取资源。当请求成功后,响应通常包含你要下载的图片数据...

    爬取图片+python

    在当今信息高速发展的时代,网络爬虫技术已经成为了获取网上信息的重要手段之一。网络爬虫,也被称作网络蜘蛛或者网络机器人,是一种按照一定的规则,自动抓取网络信息的程序或者脚本。Python作为一门编程语言,由于...

    Python爬虫项目之爬取校花图片.zip

    在爬取图片时,我们通常会寻找HTML中的`&lt;img&gt;`标签,该标签包含了图片的URL。 1. **使用Requests发送HTTP请求** 在Python中,可以使用`requests.get()`函数发送GET请求到目标网页,获取HTML源代码。例如: ```...

    爬取单张图片.docx

    其中,HTTP(HyperText Transfer Protocol)是最常用的协议之一,用于在Web服务器和客户端之间传输数据。 二、Socket编程 Socket是一种网络通信机制,允许不同的进程在网络上进行通信。在Python中,使用socket库...

    爬取煎蛋网图片的简易爬虫程序(2021.6.28可用)

    在互联网大数据时代,数据采集是许多研究和商业分析的基础,而网络爬虫则是获取数据的重要工具之一。本文将深入探讨一个针对煎蛋网(Douban Eggs)的简易图片爬虫程序,帮助读者理解如何利用Python进行网页爬取,...

    爬取汽车之家指定配置信息

    指定配置与车型,自动爬取车型配置信息,程序为爬取屏幕尺寸大小,可以根据自己的需求自行更改

    nodejs实现爬取网站图片功能

    整个过程涉及到异步操作和事件驱动的编程模型,这正是Node.js的特色之一。在Node.js中,I/O操作通常是异步的,这意味着程序可以在等待I/O操作完成时继续执行其他任务,从而提高了程序的性能。 需要注意的是,爬取...

    Python获取openstreetmap(OSM)路网信息 自动爬取城市路网图片和矢量图

    # Python获取openstreetmap(OSM)路网信息 自动爬取城市路网图片和矢量图 1. 包含中国城市的经纬度 json文件,根据经纬度自动爬取 osm 道路网; 2. 使用 matplotlib 将路网绘制为白底黑线的png格式图片; 3. 使用 ...

    在网页上爬取图片的Python爬虫.zip

    图片下载模块是项目的核心之一。爬虫将从解析模块得到的图片URL列表中,逐一发起下载请求,并将图片保存至本地指定目录。在下载过程中,还需要考虑到网络异常处理、图片命名规则、重复图片的过滤等问题。 此外,...

    如何爬取网站数据.doc

    10 台电脑分配任务帮你采集,速度降低为原来的十分之一;采集到的数据可以在云上保存三个月,可以随时进行导出操作。 其他相关教程 * 网站文章采集:http://www.bazhuayu.com/tutorial/hottutorial/qita * 网站...

    Python爬虫爬取图片代码.txt

    Python由于其简洁易读的语法和丰富的第三方库支持,成为了实现网络爬虫的热门编程语言之一。尤其是在爬取图片这类静态资源时,Python通过其强大的库支持,使得爬虫代码编写简单、执行高效。 从提供的文件内容来看,...

    爬虫爬取图片程序代码QZQ.txt

    代码首先导入了requests库,这是Python中最常用的HTTP库之一,用于发送HTTP请求。接着定义了一个名为urls的列表,列表中包含了要爬取的图片的URL地址。这些地址需要事先准备并加入到列表中,每个URL对应着网络上一张...

    python爬虫系列Selenium定向爬取虎扑篮球图片详解

    在互联网时代,图片是信息传播的重要载体之一。对于爱好篮球的朋友们来说,虎扑篮球论坛是一个不可多得的好去处,这里不仅有大量的篮球资讯,还有许多精美的图片资源。然而,手动下载这些图片不仅耗时费力,而且效率...

    利用Scrapy框架爬取妹子圖

    本教程将指导你如何使用Scrapy来爬取“妹子圖”网站上的图片。 首先,确保你的开发环境中已经安装了Python。如果还没有,可以访问Python官网下载并安装最新版本。接着,你需要安装Scrapy。在命令行中输入以下命令:...

    【Python资源】基于requests和re模块,爬取百度图片 的源码

    基于requests和re模块,爬取百度...代码实现思路可参考【Python_requests学习笔记(一)】基于requests和re模块,爬取百度图片:https://blog.csdn.net/sallyyellow/article/details/129200458?spm=1001.2014.3001.5501

    Go-Golang爬虫爬取汽车之家二手车产品库

    在本文中,我们将深入探讨如何使用Go语言(Golang)来构建一个Web爬虫,以爬取汽车之家网站上的二手车产品库数据。Go语言因其高效、简洁和强大的并发能力而被广泛用于网络爬虫的开发。我们将从以下几个方面展开讨论...

    图片及爬取图片的代码,用于作为深度学习的训练素材

    深度学习模型的训练需要大量的数据,尤其是高质量的图片素材,这是训练过程的关键因素之一。图片不仅可以用于分类、识别、分割等基础任务,还可以用于更加复杂的任务,如图像生成、风格迁移等。为了进行深度学习模型...

    源代码-方卡美女图片爬取Z1版 v2.0.zip

    ASP技术属于较早的网页编程技术之一,被广泛应用于Windows平台下的网站开发。 然而,文件名称列表给出的“132690524569255692”显得异常,这可能是一个错误,或许是一个时间戳或者其他类型的数据标识,但并不符合...

Global site tag (gtag.js) - Google Analytics