摘要:代碼需要的字段模仿獲取西部數碼信息域名代理模擬執行代碼解析出錯添加代理解析出錯查詢西部數碼失敗請求西部數碼失敗生成失敗提取西部數碼數據使用結果另外這個域名是我的,有意出售。
目標對象和過程
爬取的網站是西部數碼,該網站在https://www.west.cn/web/whois...可以查詢whois信息,通過chrome調試知道,數據是從接口:https://www.west.cn/web/whois...中獲取的
cookie分析該請求發現,qtoken2016這個key是最為重要(反爬蟲的標記,我之前寫的時候,還是qtoken),這個token的生成不在本頁,而在https://www.west.cn/main/whoi...這一頁點擊查看whois的時候,發送請求:https://www.west.cn/services/...來生成新的token,得到的結果是混淆的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函數模擬一下就可以解決。
代碼/** * 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; }; /** * 獲取西部數碼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) { // 模擬執行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("查詢西部數碼whois失敗") } } else { defer.reject("請求西部數碼whois失敗"); } }) } else { defer.reject("生成token失敗"); return defer.promise; } } else { defer.reject(error); } }); return defer.promise; } /** * 提取西部數碼數據 * @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); });
結果:
另外51nazi.com這個域名是我的,有意出售。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/89040.html
摘要:是一個基于與的高性能平臺,其內部集成了大量精良的庫第三方模塊以及大多數的依賴項。用于方便地搭建能夠處理超高并發擴展性極高的動態應用服務和動態網關。,,,階段處理,比如記錄訪問量統計平均響應時間 Lua lua的特點 小巧:一個完整的Lua解釋器不過200k 可擴展性:Lua的解釋器是100%的ANSI編寫的,它提供了非常易于使用的擴展接口和機制,所以Lua的腳本很容易的被C/C++ ...
摘要:爬蟲介紹二爬蟲的分類通用網絡爬蟲全網爬蟲爬行對象從一些種子擴充到整個,主要為門戶站點搜索引擎和大型服務提供商采集數據。 分分鐘教你用node.js寫個爬蟲 寫在前面 十分感謝大家的點贊和關注。其實,這是我第一次在segmentfault上寫文章。因為我也是前段時間偶然之間才開始了解和學習爬蟲,而且學習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...
摘要:使用的爬蟲知乎用戶數據爬取和分析閱讀掘金背景說明小拽利用的寫的爬蟲,實驗性的爬取了知乎用戶的基本信息同時,針對爬取的數據,進行了簡單的分析呈現。 Python 知乎爬蟲(最新) - 后端 - 掘金 環境:python3.x外部依賴包:requestsgithub項目地址 主要的問題:模擬登陸: 知乎現在改用https請求了,數據加密,但是問題不大,重要的是網頁數據改動了,而且在請求時后...
摘要:用將倒放這次讓我們一個用做一個小工具將動態圖片倒序播放發現引力波的機構使用的包美國科學家日宣布,他們去年月首次探測到引力波。宣布這一發現的,是激光干涉引力波天文臺的負責人。這個機構誕生于上世紀年代,進行引力波觀測已經有近年。 那些年我們寫過的爬蟲 從寫 nodejs 的第一個爬蟲開始陸陸續續寫了好幾個爬蟲,從爬拉勾網上的職位信息到爬豆瓣上的租房帖子,再到去爬知乎上的妹子照片什么的,爬蟲...
閱讀 948·2021-11-22 12:09
閱讀 3715·2021-09-27 13:36
閱讀 1406·2021-08-20 09:37
閱讀 4029·2019-12-27 12:22
閱讀 2366·2019-08-30 15:55
閱讀 2371·2019-08-30 13:16
閱讀 2832·2019-08-26 17:06
閱讀 3443·2019-08-23 18:32