記一次用JavaScript從知乎上找一個妹子的全過程

前言

我認可我太無聊了。不對,我有的是幹不完的活,只不過不想幹,因而刷刷朋友圈,恰好看到一個妹子曬了一張知乎的截圖,還特地把知乎暱稱打了碼。最最要命的是妹紙竟然說就是不想讓人知道本身的暱稱。因而我心底無限的好奇心被激發得像脫繮的二狗了。。。javascript

方案

其實要找到妹紙不難,思路很簡單。找到截圖上的問題,而後遍歷問題下全部的答案,而後在答案中尋找關鍵字就能夠定位到妹紙了。html

  • 方案一
    固然是萬能的python啊。不過我最近懶癌犯了,不想查資料。java

  • 方案二
    JavaScript 這是一門神奇的語言,恰好我會寫一點。那就這麼幹了。python

搞事情

通過分析,知乎的網頁上沒有jQuery,我須要用ajax方法,因而Google之,找到一個封裝比較好的ajax方法,以下ajax

參考 http://www.javashuo.com/article/p-vzcmgmdx-bc.htmlapi

function Ajax(type, url, data, success, failed){
    // 建立ajax對象
    var xhr = null;
    if(window.XMLHttpRequest){
        xhr = new XMLHttpRequest();
    } else {
        xhr = new ActiveXObject('Microsoft.XMLHTTP')
    }
 
    var type = type.toUpperCase();
    // 用於清除緩存
    var random = Math.random();
 
    if(typeof data == 'object'){
        var str = '';
        for(var key in data){
            str += key+'='+data[key]+'&';
        }
        data = str.replace(/&$/, '');
    }
 
    if(type == 'GET'){
        if(data){
            xhr.open('GET', url + '?' + data, true);
        } else {
            xhr.open('GET', url + '?t=' + random, true);
        }
        xhr.send();
 
    } else if(type == 'POST'){
        xhr.open('POST', url, true);
        // 若是須要像 html 表單那樣 POST 數據,請使用 setRequestHeader() 來添加 http 頭。
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.send(data);
    }
 
    // 處理返回數據
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                success(xhr.responseText);
            } else {
                if(failed){
                    failed(xhr.status);
                }
            }
        }
    }
}

其實須要作的事情是分析拉取答案的請求,而後構造下一頁的請求去拉數據。遍歷數據找目標關鍵字,若是找到了就結束,沒找到就繼續拉取下一頁的數據。
PS:須要先登陸知乎,而後在知乎頁面的console裏搞事情。。。緩存

拉取答案的url以下app

var s = "https://www.zhihu.com/api/v4/questions/29998237/answers?sort_by=default&include=data[*].is_normal,admin_closed_comment,reward_info,is_collapsed,annotation_action,annotation_detail,collapse_reason,is_sticky,collapsed_by,suggest_edit,comment_count,can_comment,content,editable_content,voteup_count,reshipment_settings,comment_permission,created_time,updated_time,review_info,relevant_info,question,excerpt,relationship.is_authorized,is_author,voting,is_thanked,is_nothelp,upvoted_followees;data[*].mark_infos[*].url;data[*].author.follower_count,badge[?(type=best_answerer)].topics&limit=20&offset=23"

接下來須要給ajax定義兩個回調函數dom

var e = function(error){
    console.log(error);
}

var f = function(data){
    data = eval('(' + data + ')');
    for(var i = 0; i < data.data.length; i++){
        if (data.data[i].content.indexOf("93在思惟貧乏的時候") >= 0){
            console.log(data.data[i].content);
            break;
        }
        if (i == data.data.length - 1) {
            var page = data.paging;
            if (!page.is_end){
                var next = page.next;console.log(next);
                next = "https:" + next.split(":")[1];
                
                console.log("翻頁:" + next);
                Ajax('get', next, {}, f, e);
            }
        }
    }
}

最後啓動函數函數

Ajax('get', s, {}, f, e);

觀察控制檯,一直在進行ajax請求,在network中也能夠看到請求的返回值。不一下子,在茫茫的答案中找到了妹紙~~~

感嘆:Chrome真TM好用。

相關文章
相關標籤/搜索