三篇文件學會使用casperjs製作爬蟲

危險遊戲i發表於2018-08-14

首先要明白什麼是爬蟲,爬蟲聽起來很強大,其實就是自動請求獲取資料處理資料的一個工具。
明白了什麼是爬蟲在看看什麼是casperjs,casperj是一個執行在python環境中的一個框架,是一個基於 PhantomJs 的工具,其比起 PhantomJs 可以更加方便的進行 navigation。(簡單點說就是一個無介面的瀏覽器)
如何使用和安裝:https://www.jianshu.com/p/46b9d255cecb
api文件:http://docs.casperjs.org/en/latest/modules/casper.html#eachthen
看完這兩個已經會玩了,我是用來抓截圖以及資料,個人不是很喜歡這個東西但是能結合jquery使用是很多人想要的。j
下面是我寫的例子:就抓我自己的部落格吧
首先要有環境:
1 要先安裝的有 nodejs 檢視版本 node -v
2.phantom解壓 新增環境變數 路徑/bin 檢視版本 phantom --version
再去phthon官網下載phthon安裝 最後 npm install -g casperjs
然後分析網頁 :這裡寫圖片描述
按f12 點左上角再點 標題:

這裡寫圖片描述
得到class 然後原網頁右鍵檢視原始碼
這裡寫圖片描述
然後ctrl+f全域性搜尋剛剛的class
這裡寫圖片描述
就得到
連結:article-item-box>h4>a
標題也在這個a裡面;
建立工程:
這裡寫圖片描述
哎喲我去,單詞寫錯了,算了就將就著看吧,反正沒什麼影響不是。
好了分析好了寫程式碼;

phantom.outputEncoding="utf-8";
//建立
var casper = require('casper').create({
    pageSettings: {
        loadImages: true, // flase不載入圖片,減少請求
    },
    clientScripts: ["jquery.1.8.js"]//客戶端預設語言 這個一定是要本地的不能遠端具體為什麼我也不知道反正就是這麼用的
});
casper.options.waitTimeout =20000; //設定訪問超時
casper.options.clientScripts = ["jquery.1.8.js"];//客戶端預設語言和上面一樣這裡可以不寫
var fs = require('fs');//用於輸出檔案
casper.start();
casper.viewport(1524, 768);
var captureSavePath = 'C:/bill/';
var url = 'https://blog.csdn.net/qq_35189120';//我的csdn部落格
casper.then(function () {
    this.open(url).then(function () {
        //不用官方的日誌是因為裡面太多不知道幹嘛的反正我看不懂不如自己提示。
        console.log("start");
        //在evaluate內無法console的因為這類似一個 遠端執行相當於在頁面中執行程式碼而不是在我們的程式中
        //step 1 遍歷全部url
            urlArr=this.evaluate(function () {
                var itemUrlArr=new Array();
                //通過選擇器遍歷
                $(".article-item-box>h4>a").each(function (index,ele) {
                    var paper={};//把文章看成物件
                    //為甚要用這麼奇詭的命名 為了避免和上面的url衝突  js會變數提升,在es6中可以使用let宣告但是這個不支援
                    var CPurl=$(ele).attr("href");//獲取url
                    var titel=$(ele).html();
                       //使用正則取出標題。 不好意思正則比較菜 前面兩個去空格,後面一個去換行符  最後一個去掉<span></span>標籤
                    titel=titel
                        .replace(/(^\s*)|(\s*$)/g, "")
                        .replace(/ /g,"")
                        .replace(/[\r\n]/g, "")
                        .replace(/^<.*>/g,"");
                    paper.url=CPurl;
                    paper.title=titel;
                    itemUrlArr.push(paper);
                });

                return itemUrlArr;
            });
            //到這裡已經獲取到全部的url和標題了
            console.log(urlArr[0].url);
        //迴圈陣列去開啟對應介面並且截圖
             var result=JSON.stringify(urlArr);
        this.eachThen(urlArr,function (response) {
            //當前物件 就是上面的paper
            var paperE=response.data;
            var cUrl=paperE.url;
            console.log("showurl:"+cUrl);
            //開啟對應的頁面
            this.open(cUrl).then(function() {
                //等待返回真執行回撥
                   this.waitFor(function () {
                       //顯示錶單載入了
                       return this.evaluate(function() {
                           return $('.blog-content-box').size() > 0;
                       });
                   },function(){
                       console.log("load success");
                        //獲取邊框範圍
                      var contentBillBounds=this.getElementBounds("div[class='blog-content-box']");
                      //截圖
                       this.capture(captureSavePath+'/'+ paperE.title+'/'+'img.jpg' , contentBillBounds);
                       //輸出資料
          fs.write(captureSavePath+'/'+ paperE.title+'/' +'data.json',result);


                   })


            });
        })
    })
});
casper.run();//執行

然在windows cmd執行
這裡寫圖片描述
這裡寫圖片描述
去定義的資料夾看看 。就是我的三篇文章 然後裡面是對應的截圖
這裡寫圖片描述
這裡寫圖片描述

要想全自動只要配合bat等其他定時操作就可
聊天交友/修仙練級群:709332479

相關文章