成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

「滴滴滴,老司機(jī)開車了」Nodejs 爬取煎蛋網(wǎng)妹子圖

Charlie_Jade / 1297人閱讀

摘要:也是就做了一個(gè)爬取煎蛋網(wǎng)妹子圖的爬蟲,并保持至本地。思路介紹通過請(qǐng)求報(bào)文模擬一次訪問煎蛋網(wǎng)的操作獲取到了網(wǎng)頁的代碼后,進(jìn)行正則表達(dá)式匹配,得到圖片地址通過圖片地址,再次發(fā)送請(qǐng)求報(bào)文,將圖片數(shù)據(jù)保存至本地思路簡(jiǎn)單了解后,便開始工作了。

“流氓不可怕,就怕流氓有文化”

前天剛考完編譯,今天考完網(wǎng)絡(luò),就開始搗鼓代碼了,花了一天時(shí)間摸索了一下nodejs的爬蟲,也就是tcp,http連接。

也是就做了一個(gè)爬取煎蛋網(wǎng)妹子圖的爬蟲,并保持至本地。

思路介紹

通過http請(qǐng)求報(bào)文模擬一次訪問煎蛋網(wǎng)的操作

獲取到了網(wǎng)頁的HTML代碼后,進(jìn)行正則表達(dá)式匹配,得到圖片地址

通過圖片地址,再次發(fā)送http請(qǐng)求報(bào)文,將圖片數(shù)據(jù)保存至本地

思路簡(jiǎn)單了解后,便開始工作了。

然而并不是一帆風(fēng)順 得不到HTML?

參考資料http://chenxi.name/60.html,利用request包進(jìn)行傻瓜式調(diào)用,然而并不能生效,將會(huì)跳轉(zhuǎn)至一個(gè)屏蔽提示網(wǎng)頁

煎蛋網(wǎng)為了防止惡意爬取數(shù)據(jù),進(jìn)行了一定程度的防爬措施。但這可難不倒我,為什么在瀏覽器上就能正常瀏覽圖片頁面呢?

于是我打開瀏覽器控制臺(tái),復(fù)制頁面請(qǐng)求報(bào)文的cmd格式,粘貼至命令行中運(yùn)行,能夠正確得到HTML。


所以,我覺得問題就是出現(xiàn)在請(qǐng)求報(bào)文頭部數(shù)據(jù),于是復(fù)制下瀏覽器中報(bào)頭,利用nodejshttp包,建立http連接。

require("http").get({
        hostname:"jandan.net",
        path:"/",
        header:{
            ...
        }
    },function(res){
        
    })

但是奇怪的是!還是響應(yīng)302,跳轉(zhuǎn)至屏蔽提示頁面。

最后沒辦法的我只好利用底層一點(diǎn)的api——net包,建立tcp連接,發(fā)送符合http請(qǐng)求報(bào)文格式的數(shù)據(jù)。

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最后需要兩個(gè) 表示請(qǐng)求報(bào)頭結(jié)束。最后果然是成功了,但具體兩種方法的不同我也說不上來,希望有熱心讀者能告訴我。

數(shù)據(jù)傳輸同步異步?

利用下面的遞歸方法加上Promise.all同步方法,防止過度的tcp連接(改用下面方法后,tcp讀寫錯(cuò)誤明顯減少,但還是會(huì)出現(xiàn),不知道有沒有大神幫我解決該問題呢?)

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)=>{
                //上一頁的圖片加入下載隊(duì)列后,再開始遞歸下一頁。
                run(i-1,low);
            });
    });
}

最后文件夾就像下面一樣!

甩下代碼地址,飆個(gè)車

jandan-spider

關(guān)注我的博客moyuyc.github.io ,有技術(shù)的老司機(jī)帶你飆車!






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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79816.html

相關(guān)文章

  • UCloud優(yōu)刻得快杰云主機(jī)原理大揭秘

    摘要:大家知道,一塊網(wǎng)卡的價(jià)格其實(shí)要遠(yuǎn)遠(yuǎn)低于一顆,如此設(shè)計(jì)也使得快杰云主機(jī)的性價(jià)比得到進(jìn)一步提升再看存儲(chǔ)網(wǎng)公路,即用戶主機(jī)和存儲(chǔ)集群之間的通信。老劉博客之前文章有介紹過《新一代快杰云主機(jī):計(jì)算、網(wǎng)絡(luò)、存儲(chǔ),唯快不破》,描述了UCloud對(duì)標(biāo)阿里云第六代云服務(wù)器的超高性價(jià)比的快杰云主機(jī)應(yīng)用場(chǎng)景和非凡的機(jī)器性能以及客戶案例。有朋友看過后,跑過來問老劉快杰云主機(jī)原理,快杰那么突出的性能是全靠CPU嗎?是...

    Tecode 評(píng)論0 收藏0
  • 手把手教你用Python爬蟲煎蛋妹紙海量

    摘要:我們的目標(biāo)是用爬蟲來干一件略污事情最近聽說煎蛋上有好多可愛的妹子,而且爬蟲從妹子圖抓起練手最好,畢竟動(dòng)力大嘛。服務(wù)器超載尤其是對(duì)給定服務(wù)器的訪問過高時(shí)。個(gè)人爬蟲,如果過多的人使用,可能導(dǎo)致網(wǎng)絡(luò)或者服務(wù)器阻塞。 我們的目標(biāo)是用爬蟲來干一件略污事情 最近聽說煎蛋上有好多可愛的妹子,而且爬蟲從妹子圖抓起練手最好,畢竟動(dòng)力大嘛。而且現(xiàn)在網(wǎng)絡(luò)上的妹子很黃很暴力,一下接受太多容易營(yíng)養(yǎng)不量,但是本著...

    tuantuan 評(píng)論0 收藏0
  • ??Java程序員開發(fā)一套系統(tǒng),賣800萬,成都買6套房

    大家好,我是鋒哥。今天就不爆照了,主要是內(nèi)心比較澎湃; 剛剛 群里,段大佬發(fā)布技術(shù)搞錢交流會(huì),如下圖: 某大佬開發(fā)一套系統(tǒng),賣了800萬,成都買了6套房,把普通人兩輩子的錢都一次性賺好了。 作為10年IT行業(yè)經(jīng)驗(yàn),已經(jīng)看穿這個(gè)行業(yè); 所以我也一直有個(gè)規(guī)劃,技術(shù)沉淀到一定階段,搞些有搞頭的產(chǎn)品,招幾個(gè)女大專生運(yùn)維,成本控制好,產(chǎn)品一旦成熟,以及用戶量上去,然后價(jià)格差不多的話,直接出售賣掉,起步...

    luxixing 評(píng)論0 收藏0
  • 好家伙!Java程序員開發(fā)一套系統(tǒng),賣800萬,成都買6套房!屬實(shí)是走上人生巔峰!

    摘要:大家好,我是然然。今天內(nèi)心比較澎湃剛剛?cè)豪?,段大佬發(fā)布技術(shù)搞錢交流會(huì),如下圖某大佬開發(fā)一套系統(tǒng),賣了萬,成都買了套房,把普通人兩輩子的錢都一次性賺好了。 大家好,我是然然。今天內(nèi)心比較澎湃; 剛剛 群里,段大佬發(fā)布技術(shù)搞錢交流會(huì),如下圖: 某大佬開發(fā)一套系統(tǒng),賣了800萬,成都買了6套房,...

    DesGemini 評(píng)論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Charlie_Jade

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<