摘要:代碼需要的字段模仿獲取西部數(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
摘要:是一個基于與的高性能平臺,其內(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++ ...
摘要:爬蟲介紹二爬蟲的分類通用網(wǎng)絡(luò)爬蟲全網(wǎng)爬蟲爬行對象從一些種子擴(kuò)充到整個,主要為門戶站點搜索引擎和大型服務(wù)提供商采集數(shù)據(jù)。 分分鐘教你用node.js寫個爬蟲 寫在前面 十分感謝大家的點贊和關(guān)注。其實,這是我第一次在segmentfault上寫文章。因為我也是前段時間偶然之間才開始了解和學(xué)習(xí)爬蟲,而且學(xué)習(xí)node的時間也不是很長。雖然用node做過一些后端的項目,但其實在node和爬蟲方面...
摘要:很早之前用也是寫過一個,但是寫的不好,這次用寫,看看自己有木有提升。 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...
摘要:使用的爬蟲知乎用戶數(shù)據(jù)爬取和分析閱讀掘金背景說明小拽利用的寫的爬蟲,實驗性的爬取了知乎用戶的基本信息同時,針對爬取的數(shù)據(jù),進(jìn)行了簡單的分析呈現(xiàn)。 Python 知乎爬蟲(最新) - 后端 - 掘金 環(huán)境:python3.x外部依賴包:requestsgithub項目地址 主要的問題:模擬登陸: 知乎現(xiàn)在改用https請求了,數(shù)據(jù)加密,但是問題不大,重要的是網(wǎng)頁數(shù)據(jù)改動了,而且在請求時后...
摘要:用將倒放這次讓我們一個用做一個小工具將動態(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)上的職位信息到爬豆瓣上的租房帖子,再到去爬知乎上的妹子照片什么的,爬蟲...
閱讀 929·2021-11-22 12:09
閱讀 3704·2021-09-27 13:36
閱讀 1390·2021-08-20 09:37
閱讀 4007·2019-12-27 12:22
閱讀 2352·2019-08-30 15:55
閱讀 2357·2019-08-30 13:16
閱讀 2817·2019-08-26 17:06
閱讀 3433·2019-08-23 18:32