摘要:也是就做了一個爬取煎蛋網妹子圖的爬蟲,并保持至本地。思路介紹通過請求報文模擬一次訪問煎蛋網的操作獲取到了網頁的代碼后,進行正則表達式匹配,得到圖片地址通過圖片地址,再次發送請求報文,將圖片數據保存至本地思路簡單了解后,便開始工作了。
“流氓不可怕,就怕流氓有文化”
前天剛考完編譯,今天考完網絡,就開始搗鼓代碼了,花了一天時間摸索了一下nodejs的爬蟲,也就是tcp,http連接。
也是就做了一個爬取煎蛋網妹子圖的爬蟲,并保持至本地。
思路介紹通過http請求報文模擬一次訪問煎蛋網的操作
獲取到了網頁的HTML代碼后,進行正則表達式匹配,得到圖片地址
通過圖片地址,再次發送http請求報文,將圖片數據保存至本地
思路簡單了解后,便開始工作了。
然而并不是一帆風順 得不到HTML?參考資料http://chenxi.name/60.html,利用request包進行傻瓜式調用,然而并不能生效,將會跳轉至一個屏蔽提示網頁
煎蛋網為了防止惡意爬取數據,進行了一定程度的防爬措施。但這可難不倒我,為什么在瀏覽器上就能正常瀏覽圖片頁面呢?
于是我打開瀏覽器控制臺,復制頁面請求報文的cmd格式,粘貼至命令行中運行,能夠正確得到HTML。
所以,我覺得問題就是出現在請求報文頭部數據,于是復制下瀏覽器中報頭,利用nodejs的http包,建立http連接。
require("http").get({ hostname:"jandan.net", path:"/", header:{ ... } },function(res){ })
但是奇怪的是!還是響應302,跳轉至屏蔽提示頁面。
最后沒辦法的我只好利用底層一點的api——net包,建立tcp連接,發送符合http請求報文格式的數據。
var net = require("net"); var header = require("fs").readFileSync("./header.txt").toString(); module.exports = function (path,callback) { const socket = net.createConnection(80,"jandan.net"); socket.write( "GET "+path+" HTTP/1.1 "+ header ); socket.setEncoding("utf-8"); socket.setTimeout(4000,function () { callback(html); console.error(new Error("Time OUT")); socket.end(); }); var html = ""; socket.on("data",function (chunk) { html+=chunk; }); socket.on("end",function () { console.log("disconnected from server"); }); }
header.txt
Host: jandan.net Connection: keep-alive Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 Referer: http://jandan.net/v Accept-Language: zh-CN,zh;q=0.8 Cookie: gif-click-load=on; bad-click-load=on; PHPSESSID=u1gnmqnpb75injakbgvkb6r413; 4036050675=c119Yp%2BLrMWuv%2BWMyYtq3x6vTdbFzaTbUyoiLt%2Fv; jdna=596e6fb28c1bb47f949e65e1ae03f7f5#1467288596467; Hm_lvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1467287791; Hm_lpvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1467288598; _ga=GA1.2.330681373.1467287790
注意,header.txt最后需要兩個 表示請求報頭結束。最后果然是成功了,但具體兩種方法的不同我也說不上來,希望有熱心讀者能告訴我。
數據傳輸同步異步?利用下面的遞歸方法加上Promise.all同步方法,防止過度的tcp連接(改用下面方法后,tcp讀寫錯誤明顯減少,但還是會出現,不知道有沒有大神幫我解決該問題呢?)
function run(i,low) { if(i{ return new Promise((resolve,reject)=>{ var req = http.get(x,function (res) { res.on("error",function (err) { console.error(err); resolve("fail"); }); var filename = x.substr(x.lastIndexOf("/")+1); download(dir+"/"+filename,res); console.log("PAGE:"+page+"..."+filename+"..."+(i+1)+"/"+a.length); resolve("done"); }).end(); }); }); Promise.all(proms) .then((values)=>{ //上一頁的圖片加入下載隊列后,再開始遞歸下一頁。 run(i-1,low); }); }); }
最后文件夾就像下面一樣!
甩下代碼地址,飆個車jandan-spider
關注我的博客moyuyc.github.io ,有技術的老司機帶你飆車!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79816.html
摘要:大家知道,一塊網卡的價格其實要遠遠低于一顆,如此設計也使得快杰云主機的性價比得到進一步提升再看存儲網公路,即用戶主機和存儲集群之間的通信。老劉博客之前文章有介紹過《新一代快杰云主機:計算、網絡、存儲,唯快不破》,描述了UCloud對標阿里云第六代云服務器的超高性價比的快杰云主機應用場景和非凡的機器性能以及客戶案例。有朋友看過后,跑過來問老劉快杰云主機原理,快杰那么突出的性能是全靠CPU嗎?是...
摘要:我們的目標是用爬蟲來干一件略污事情最近聽說煎蛋上有好多可愛的妹子,而且爬蟲從妹子圖抓起練手最好,畢竟動力大嘛。服務器超載尤其是對給定服務器的訪問過高時。個人爬蟲,如果過多的人使用,可能導致網絡或者服務器阻塞。 我們的目標是用爬蟲來干一件略污事情 最近聽說煎蛋上有好多可愛的妹子,而且爬蟲從妹子圖抓起練手最好,畢竟動力大嘛。而且現在網絡上的妹子很黃很暴力,一下接受太多容易營養不量,但是本著...
大家好,我是鋒哥。今天就不爆照了,主要是內心比較澎湃; 剛剛 群里,段大佬發布技術搞錢交流會,如下圖: 某大佬開發一套系統,賣了800萬,成都買了6套房,把普通人兩輩子的錢都一次性賺好了。 作為10年IT行業經驗,已經看穿這個行業; 所以我也一直有個規劃,技術沉淀到一定階段,搞些有搞頭的產品,招幾個女大專生運維,成本控制好,產品一旦成熟,以及用戶量上去,然后價格差不多的話,直接出售賣掉,起步...
摘要:大家好,我是然然。今天內心比較澎湃剛剛群里,段大佬發布技術搞錢交流會,如下圖某大佬開發一套系統,賣了萬,成都買了套房,把普通人兩輩子的錢都一次性賺好了。 大家好,我是然然。今天內心比較澎湃; 剛剛 群里,段大佬發布技術搞錢交流會,如下圖: 某大佬開發一套系統,賣了800萬,成都買了6套房,...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
閱讀 1752·2021-10-13 09:39
閱讀 1322·2019-08-30 13:58
閱讀 1415·2019-08-29 16:42
閱讀 3564·2019-08-29 15:41
閱讀 2996·2019-08-29 15:11
閱讀 2483·2019-08-29 14:10
閱讀 3413·2019-08-29 13:29
閱讀 2093·2019-08-26 13:27