国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Just for fun——寫個爬蟲抓取whois信息

Cheng_Gang / 1899人閱讀

摘要:代碼需要的字段模仿獲取西部數(shù)碼信息域名代理模擬執(zhí)行代碼解析出錯添加代理解析出錯查詢西部數(shù)碼失敗請求西部數(shù)碼失敗生成失敗提取西部數(shù)碼數(shù)據(jù)使用結(jié)果另外這個域名是我的,有意出售。

目標(biāo)對象和過程

爬取的網(wǎng)站是西部數(shù)碼,該網(wǎng)站在https://www.west.cn/web/whois...可以查詢whois信息,通過chrome調(diào)試知道,數(shù)據(jù)是從接口:https://www.west.cn/web/whois...中獲取的

cookie

分析該請求發(fā)現(xiàn),qtoken2016這個key是最為重要(反爬蟲的標(biāo)記,我之前寫的時候,還是qtoken),這個token的生成不在本頁,而在https://www.west.cn/main/whoi...這一頁點擊查看whois的時候,發(fā)送請求:https://www.west.cn/services/...來生成新的token,得到的結(jié)果是混淆的js代碼:

var l=[119,98,115,33,117,116,101,112,98,62,92,50,50,54,45,50,49,50,45,50,50,52,45,50,50,49,45,50,50,55,45,50,51,51,45,50,49,58,45,50,50,54,45,50,50,52,45,50,49,55,45,50,50,54,45,50,49,50,45,50,50,51,45,50,50,54,45,50,50,52,45,50,50,51,45,50,51,51,45,50,50,51,45,50,50,58,45,50,49,55,45,50,50,55,45,50,49,50,94,60,119,98,115,33,101,99,105,107,114,62,92,57,45,53,45,50,56,45,50,49,45,50,50,45,50,57,45,58,45,50,51,45,51,49,45,50,54,45,49,45,50,52,45,55,45,54,45,50,55,45,51,50,45,52,45,50,58,45,50,53,45,50,45,56,45,51,94,60,119,98,115,33,99,62,35,35,60,103,112,115,33,41,100,62,49,60,100,61,101,99,105,107,114,47,109,102,111,104,117,105,60,100,44,44,42,124,99,44,62,84,117,115,106,111,104,47,103,115,112,110,68,105,98,115,68,112,101,102,41,117,116,101,112,98,92,101,99,105,107,114,92,100,94,94,42,126,60,37,47,100,112,112,108,106,102,41,40,114,117,112,108,102,111,51,49,50,55,40,45,99,45,124,113,98,117,105,59,40,48,40,126,42,60];eval(function(p,a,c,k,e,d){e=function(c){return(c35?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(""+e(c)+"","g"),k[c]);return p;}("6 3="";7(2=0;2<4.5;2++){3+=8.a(4[2]-1)};9(3)",11,11,"||i|t|l|length|var|for|String|eval|fromCharCode".split("|"),0,{}))

對于這一點,用js的eval函數(shù)模擬一下就可以解決。

代碼
/**
 * Created by salamander on 2016/11/8.
 */
let request = require("request");
let Q = require("q");
let datetime = require("locutus/php/datetime");

let getTokenUrl = "http://www.west.cn/main/whois.asp?act=gettok&_=";
let whoisUrl = "http://www.west.cn/web/whois/whoisinfo?domain=";
// 需要的字段
let needFields = ["domain", "registrar", "country", "mail", "whoisinfo", "add_time", "registrant_name", "expire_date"];

// 模仿jquery
let jQuery, $;
$ = jQuery = {
    token: ""
};

jQuery.cookie =  function(name, value, options) {
    this.token = value;
};

/**
 * 獲取西部數(shù)碼whois信息
 * @param domain 域名
 * @param proxy 代理
 */
function getWestWhois(domain, proxy) {
    let defer = Q.defer();
    let firstOptions = {
        url: getTokenUrl + (new Date()).getTime()
    };
    if(proxy) {
        firstOptions.proxy = "http://" + proxy.trim();
    }
    request(firstOptions, function (error, response, body) {
        if(!error && response.statusCode === 200) {
            // 模擬執(zhí)行js代碼
            try {
                eval(body);
            } catch (err) {
                defer.reject("解析json出錯:" + err);
                return;
            }
            if($.token) {
                let options = {
                    url: whoisUrl +  domain + "&server=&refresh=1",
                    headers: {
                        "Cookie": "qtoken=" + $.token,
                        "X-Requested-With": "XMLHttpRequest"
                    }
                };
                // 添加代理
                if(proxy) {
                    options.proxy = "http://" + proxy.trim();
                }
                request(options, function (error, response, body) {
                    if(!error && response.statusCode === 200) {
                        let data = null;
                        try {
                            data = JSON.parse(body);
                        } catch (err) {
                            defer.reject("解析json出錯:" + err);
                            return;
                        }
                        if(data["code"] === 200) {
                            defer.resolve(extractWestData(domain, data));
                        } else {
                            defer.reject("查詢西部數(shù)碼whois失敗")
                        }
                    } else {
                        defer.reject("請求西部數(shù)碼whois失敗");
                    }
                })
            } else {
                defer.reject("生成token失敗");
                return defer.promise;
            }
        } else {
            defer.reject(error);
        }
    });
    return defer.promise;
}

/**
 * 提取西部數(shù)碼數(shù)據(jù)
 * @param domain
 * @param data
 */
function extractWestData(domain, data) {
    let country = solveCountry(domain, data["body"]);
    return {
        domain: domain,
        mail: data["dom_em"],
        errcode: 0,
        country: country,
        registrant_name: data["dom_org"],
        registrar: data["registrer"],
        expire: data["expdate"],
        whoisinfo: JSON.stringify({
            domain: domain,
            mail: data["dom_em"],
            errcode: 0,
            country: country,
            registrant_name: data["dom_org"],
            registrar: data["registrer"],
            expire: data["expdate"]
        })
    };

    function solveCountry(domain, html) {
        if(domain && domain.substr(-1, 3) === ".cn") {
            return  "CN";
        }
        let result = html.match(/Registrant Country: (S+?)
/); if(result) { return result[1].trim(); } return ""; } } module.exports.getWestWhois = getWestWhois;
使用
let westWhois = require("./west_whois.js");

westWhois.getWestWhois("51nazi.com").then((info) => {
    console.log(info);
});

結(jié)果:

另外

51nazi.com這個域名是我的,有意出售。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/89040.html

相關(guān)文章

  • Just for fun——Nginx配Lua寫個hello world

    摘要:是一個基于與的高性能平臺,其內(nèi)部集成了大量精良的庫第三方模塊以及大多數(shù)的依賴項。用于方便地搭建能夠處理超高并發(fā)擴(kuò)展性極高的動態(tài)應(yīng)用服務(wù)和動態(tài)網(wǎng)關(guān)。,,,階段處理,比如記錄訪問量統(tǒng)計平均響應(yīng)時間 Lua lua的特點 小巧:一個完整的Lua解釋器不過200k 可擴(kuò)展性:Lua的解釋器是100%的ANSI編寫的,它提供了非常易于使用的擴(kuò)展接口和機(jī)制,所以Lua的腳本很容易的被C/C++ ...

    kevin 評論0 收藏0
  • 分分鐘教你用node.js寫個爬蟲

    摘要:爬蟲介紹二爬蟲的分類通用網(wǎng)絡(luò)爬蟲全網(wǎng)爬蟲爬行對象從一些種子擴(kuò)充到整個,主要為門戶站點搜索引擎和大型服務(wù)提供商采集數(shù)據(jù)。 分分鐘教你用node.js寫個爬蟲 寫在前面 十分感謝大家的點贊和關(guān)注。其實,這是我第一次在segmentfault上寫文章。因為我也是前段時間偶然之間才開始了解和學(xué)習(xí)爬蟲,而且學(xué)習(xí)node的時間也不是很長。雖然用node做過一些后端的項目,但其實在node和爬蟲方面...

    fanux 評論0 收藏0
  • Just for fun——用Python的Tkinter寫個連連看

    摘要:很早之前用也是寫過一個,但是寫的不好,這次用寫,看看自己有木有提升。 UI showImg(https://segmentfault.com/img/bVWg8e?w=1074&h=839); 代碼 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-10-02 15:19:24 # @Author : Sa...

    崔曉明 評論0 收藏0
  • 爬蟲 - 收藏集 - 掘金

    摘要:使用的爬蟲知乎用戶數(shù)據(jù)爬取和分析閱讀掘金背景說明小拽利用的寫的爬蟲,實驗性的爬取了知乎用戶的基本信息同時,針對爬取的數(shù)據(jù),進(jìn)行了簡單的分析呈現(xiàn)。 Python 知乎爬蟲(最新) - 后端 - 掘金 環(huán)境:python3.x外部依賴包:requestsgithub項目地址 主要的問題:模擬登陸: 知乎現(xiàn)在改用https請求了,數(shù)據(jù)加密,但是問題不大,重要的是網(wǎng)頁數(shù)據(jù)改動了,而且在請求時后...

    zzbo 評論0 收藏0
  • Evil Python

    摘要:用將倒放這次讓我們一個用做一個小工具將動態(tài)圖片倒序播放發(fā)現(xiàn)引力波的機(jī)構(gòu)使用的包美國科學(xué)家日宣布,他們?nèi)ツ暝率状翁綔y到引力波。宣布這一發(fā)現(xiàn)的,是激光干涉引力波天文臺的負(fù)責(zé)人。這個機(jī)構(gòu)誕生于上世紀(jì)年代,進(jìn)行引力波觀測已經(jīng)有近年。 那些年我們寫過的爬蟲 從寫 nodejs 的第一個爬蟲開始陸陸續(xù)續(xù)寫了好幾個爬蟲,從爬拉勾網(wǎng)上的職位信息到爬豆瓣上的租房帖子,再到去爬知乎上的妹子照片什么的,爬蟲...

    Turbo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<