用Javascript大批量收集網站資料

來源:互聯網
上載者:User

標籤:網站社交   ast   沒有   name   控制台   經驗值   getc   pre   code   

最近為了寫論文,要大批量收集慕課網的相關使用者資料(因為使用者個人首頁是公開的),故而寫了一個外掛程式進行收集。需要在慕課網控制台輸入。最後收集了3000多份資料。

 

/*

收集項

收集標準

使用者編號

慕課網使用者編號是七位元遞增的,範圍在5000000以內。故而本次收集將在1000000至5000000內分區段進行資料的隨機收集。

學習時間長度

慕課有記錄使用者的總共學習時間長度,如110時34分。為方便後期統計,將該資料轉化為以分鐘為單位的資料。

積分

積分反映的是使用者參與網站社交的程度。

經驗

相比學習時間長度,經驗更能直接反映課程完成程度。

學習課程數

為避免使用者參加課程而沒有進行學習,課程學習數以學習進度超過5%的課程為準入標準。

平均完成度

指學生課程的平均完成度。

完成課程數

為課程完成度80%及以上的課程。

參加路徑數

慕課網的學習路徑的參與數目。

路徑完成度

學習路徑的完成程度。

*/var userInfo = function(user,link,i){    var user = user;    var link = link;    this.name = i;    var _this_ = this;    this.getBasicInfo(user);    this.getCourseNum(user);    this.getRoute(user,link);    setTimeout(function(){        console.log(_this_.name+"\t"+_this_.learnTime+"\t"+_this_.credit+"\t"+_this_.mp+"\t"+_this_.CourseNum+"\t"+_this_.learnAve+"\t"+_this_.finish+"\t"+_this_.routeNum+"\t"+_this_.routeAve);        user.close();    },10000);};userInfo.prototype ={//便捷存取子;getElem : function(user,className,tag) {            var infor =user.document.getElementsByClassName(className)[0].getElementsByTagName(tag)[0].innerHTML;            return infor;        },//擷取基本資料:名字、學習時間長度、積分、經驗值。getBasicInfo:function(d){                    var user = d;                    //get time;                    var time =this.getElem(user,"u-info-learn","em");                    var cutHour = /\d+(?=\W{2})/g;                    var hour = parseInt(time.match(cutHour))*60;                    var cutMinute = /\d+(?!\W{2})/g;                     var minute = parseInt(time.match(cutMinute));                    if(isNaN(hour)){                        var learnTime = minute;                    }else{                        var learnTime = hour+minute;                    }                    this.learnTime = learnTime;                    //get credit;                    var credit = parseFloat(this.getElem(user,"u-info-credit","em"));                    this.credit = credit;                    //get mp;                    var mp = parseFloat(this.getElem(user,"u-info-mp","em"));                    this.mp = mp;    },//獲得課程數量和課程完成度getCourseNum:function(d){                var self = this;                var user = d;                var CourseNum = 0,                    learnSum = 0,                    finish = 0;                //獲得一個頁面的課程數量和完成度                                function getOnepage(obj){                    if(obj.document.getElementsByClassName("course-one").length > 0){                        var course = obj.document.getElementsByClassName("course-one");                        for(i = 0;i<course.length;i++){                            var    hasLearn = course[i].getElementsByClassName("i-left")[0].innerHTML,                                cutWord = /\W\W/g;                            var hasLearn =parseFloat(hasLearn.replace(cutWord,""));                            if(hasLearn > 5){                                CourseNum = CourseNum + 1;                                learnSum = learnSum + hasLearn;                                if(hasLearn > 80){                                    finish = finish + 1;                                }                            };                        };                        self.CourseNum = CourseNum;                        if(CourseNum !== 0){                        self.learnAve = (learnSum/CourseNum).toFixed(2);                        }                        self.finish = finish;                    }                };                //擷取當前頁面                                getOnepage(user);                //擷取其他頁面                if(user.document.getElementsByClassName("text-page-tag").length > 0){                    var pages = user.document.getElementsByClassName("text-page-tag");                    if(pages.length > 1){                        for(i=1;i<pages.length;i++){                            !function(i){                            var page = window.open(pages[i].getAttribute("href"));                                setTimeout(function get(){                                    if(page.document.getElementsByClassName("course-one").length > 0){                                            getOnepage(page);                                            page.close();                                            self.CourseNum = CourseNum;                                            self.learnAve = (learnSum/CourseNum).toFixed(2);                                            self.finish = finish;                                    }else{                                        console.log("page" + i +"didn‘t load!");                                    }                                },5000);//要若有些頁面沒有在4S內開啟,導致無法取值怎麼辦?                            }(i);                        };                    };                }                //擷取其他頁面列表                 if(user.document.getElementsByClassName("page").length > 0){                var lastPage =user.document.getElementsByClassName("page")[0].lastChild.getAttribute("href");                var allPage = parseInt(lastPage.match(/\d$/));                if(allPage>7){                    var otherLink = lastPage.match(/^.*=(?=\d)/g);                    for(i=8;i <= allPage;i++){                            !function(i){                        var page = window.open(otherLink+i);                            setTimeout(function get(){                                if(page.document.getElementsByClassName("course-one").length > 0){                                        getOnepage(page);                                        page.close();                                        self.CourseNum = CourseNum;                                        self.learnAve = (learnSum/CourseNum).toFixed(2);                                        self.finish = finish;                                }else{                                    console.log("page" + i +"didn‘t load!");                                }                            },4000);//記得找個好的網路,防止有些頁面沒有在4S內開啟,導致無法取值。                        }(i);                    };                };                }    },//擷取參加路徑數getRoute : function(d,link){            var user = d;            var self = this;            var currPage = link;            var openPage = window.open(currPage.replace("courses","plans"))            setTimeout(function(){                if(openPage.document.getElementsByClassName("plans-item").length > 0){                    var route = openPage.document.getElementsByClassName("plans-item");                    var routeNum = route.length;                    var routeLearn = openPage.document.getElementsByClassName("plans-list-progress");                    var routeSum = 0,learnSum = 0;                    for(i=0;i<routeNum;i++){                        var hasLearn = parseFloat(routeLearn[i].innerHTML.replace(/\W+/,""));                        if(hasLearn>2){                            routeSum = routeSum + hasLearn;                            learnSum +=1;                        };                    };                    if(learnSum > 0 ){                        routeAve = routeSum/learnSum;                        self.routeAve = routeAve;                    }                    self.routeNum =routeNum;                };                openPage.close();            },5000)                }};

//開啟頁面var n = Math.round(Math.random()*1000000+4000000);//取3000000-4000000之間的隨機數var min = n;function openLink(){ if(n< min+1000){ //取1000份資料 var link = "http://www.imooc.com/u/"+ n +"/courses"; var user = window.open(link); setTimeout(function(){ if(user.document.getElementsByClassName("user-name").length > 0){ new userInfo(user,link,n); }else{ console.log(n+" page didn‘t exit!") }; },4000); setTimeout(function(){n = n+1;openLink();},4000) }};openLink();

 

用Javascript大批量收集網站資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.