之前寫了個現在看來很不完美的小爬蟲,很多地方沒有處理好,比如說在知乎點開一個問題的時候,它的所有回答并不是全部加載好了的,當你拉到回答的尾部時,點擊加載更多,回答才會再加載一部分,所以說如果直接發送一個問題的請求鏈接,取得的頁面是不完整的。還有就是我們通過發送鏈接下載圖片的時候,是一張一張來下的,如果圖片數量太多的話,真的是下到你睡完覺它還在下,而且我們用nodejs寫的爬蟲,卻竟然沒有用到nodejs最牛逼的異步并發的特性,太浪費了啊。
思路
這次的的爬蟲是上次那個的升級版,不過呢,上次那個雖然是簡單,但是很適合新手學習啊。這次的爬蟲代碼在我的github上可以找到=>NodeSpider。
整個爬蟲的思路是這樣的:在一開始我們通過請求問題的鏈接抓取到部分頁面數據,接下來我們在代碼中模擬ajax請求截取剩余頁面的數據,當然在這里也是可以通過異步來實現并發的,對于小規模的異步流程控制,可以用這個模塊=>eventproxy,但這里我就沒有用啦!我們通過分析獲取到的頁面從中截取出所有圖片的鏈接,再通過異步并發來實現對這些圖片的批量下載。
抓取頁面初始的數據很簡單啊,這里就不做多解釋啦
/*獲取首屏所有圖片鏈接*/var getInitUrlList=function(){request.get("https://www.zhihu.com/question/").end(function(err,res){if(err){console.log(err);}else{var $=cheerio.load(res.text);var answerList=$(".zm-item-answer");answerList.map(function(i,answer){var images=$(answer).find('.zm-item-rich-text img');images.map(function(i,image){photos.push($(image).attr("src"));});});console.log("已成功抓取"+photos.length+"張圖片的鏈接");getIAjaxUrlList();}});}
模擬ajax請求獲取完整頁面
接下來就是怎么去模擬點擊加載更多時發出的ajax請求了,去知乎看一下吧!
有了這些信息,就可以來模擬發送相同的請求來獲得這些數據啦。
/*每隔毫秒模擬發送ajax請求,并獲取請求結果中所有的圖片鏈接*/var getIAjaxUrlList=function(offset){request.post("https://www.zhihu.com/node/QuestionAnswerListV").set(config).send("method=next¶ms=%B%url_token%%A%C%pagesize%%A%C%offset%%A" +offset+ "%D&_xsrf=adfdeee").end(function(err,res){if(err){console.log(err);}else{var response=JSON.parse(res.text);/*想用json的話對json序列化即可,提交json的話需要對json進行反序列化*/if(response.msg&&response.msg.length){var $=cheerio.load(response.msg.join(""));/*把所有的數組元素拼接在一起,以空白符分隔,不要這樣join(),它會默認數組元素以逗號分隔*/var answerList=$(".zm-item-answer");answerList.map(function(i,answer){var images=$(answer).find('.zm-item-rich-text img');images.map(function(i,image){photos.push($(image).attr("src"));});});setTimeout(function(){offset+=;console.log("已成功抓取"+photos.length+"張圖片的鏈接");getIAjaxUrlList(offset);},);}else{console.log("圖片鏈接全部獲取完畢,一共有"+photos.length+"條圖片鏈接");// console.log(photos);return downloadImg();}}});}
在代碼中post這條請求https://www.zhihu.com/node/QuestionAnswerListV2,把原請求頭和請求參數復制下來,作為我們的請求頭和請求參數,superagent的set方法可用來設置請求頭,send方法可以用來發送請求參數。我們把請求參數中的offset初始為20,每隔一定時間offset再加20,再重新發送請求,這樣就相當于我們每隔一定時間發送了一條ajax請求,獲取到最新的20條數據,每獲取到了數據,我們再對這些數據進行一定的處理,讓它們變成一整段的html,便于后面的提取鏈接處理。 異步并發控制下載圖片再獲取完了所有的圖片鏈接之后,即判定response.msg為空時,我們就要對這些圖片進行下載了,不可能一條一條下對不對,因為如你所看到的,我們的圖片足足有
沒錯,2萬多張,不過幸好nodejs擁有神奇的單線程異步特性,我們可以同時對這些圖片進行下載。但這個時候問題來了,聽說同時發送請求太多的話會被網站封ip噠!這是真的嗎?我不知道啊,沒試過,因為我也不想去試( ̄亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲字幕在线观看| 国产精品久久久久久久久久久久久久| 国模私拍一区二区三区| 九九热这里只有精品6| 色一区av在线| 在线播放国产精品| 亚洲福利视频网| 热久久视久久精品18亚洲精品| 欧美日本啪啪无遮挡网站| 日韩在线www| 欧美黄色性视频| 国产精品国内视频| 欧美成人免费全部| 日本三级韩国三级久久| 久久99国产精品久久久久久久久| 国产精品欧美亚洲777777| 91国内在线视频| 亚洲天堂开心观看| 国产精品电影久久久久电影网| 国产精国产精品| 国产精品99一区| 68精品国产免费久久久久久婷婷| 国产99久久精品一区二区永久免费| 国产一区红桃视频| 欧美日韩一区二区三区在线免费观看| 91久久久亚洲精品| 久久精品久久久久电影| 久久精品国产91精品亚洲| 亚洲电影免费观看高清完整版| 97久久伊人激情网| 欧美久久精品午夜青青大伊人| 91亚洲精品在线| 欧美一级片免费在线| 亚洲缚视频在线观看| 国产精品中文久久久久久久| 欧美第一页在线| 日本精品视频在线观看| 欧美成人在线免费视频| 91麻豆桃色免费看| 不卡av电影在线观看| 成人精品一区二区三区| 日韩在线视频免费观看| 欧美—级a级欧美特级ar全黄| 日韩欧美成人免费视频| 国产一区二区三区三区在线观看| 亚洲国产欧美久久| 亚洲精品国产精品国自产观看浪潮| 中文字幕国产日韩| 国产成+人+综合+亚洲欧美丁香花| 久久精品国产久精国产思思| 亚洲高清久久久久久| 九九热精品视频| 亚洲国产精品一区二区久| 欧美国产日本高清在线| 色妞一区二区三区| 欧美伊久线香蕉线新在线| 黄网站色欧美视频| 欧美在线视频在线播放完整版免费观看| 欧美精品激情在线| 亚洲天堂av图片| 91在线视频精品| 宅男66日本亚洲欧美视频| 亚洲国产另类 国产精品国产免费| 欧美激情亚洲一区| 国产一区二区在线免费| 亚洲综合自拍一区| 国产日韩欧美在线播放| 91tv亚洲精品香蕉国产一区7ujn| 欧美电影免费观看| 色诱女教师一区二区三区| 91精品视频专区| 亚洲天堂免费在线| 欧美日韩裸体免费视频| 国产精品自拍小视频| 性亚洲最疯狂xxxx高清| 在线观看免费高清视频97| 91精品久久久久久久久久久久久| 91视频国产一区| 欧美日韩视频免费播放| 欧美巨乳美女视频| 亚洲精品久久7777777| 国产丝袜高跟一区| 日韩av手机在线| 亚洲第一色中文字幕| 国产精品视频久久久久| 日韩精品亚洲元码| 国产精品影院在线观看| 亚洲国产成人在线播放| 久久精品国产96久久久香蕉| 欧美精品日韩三级| 久久中文字幕在线| 国产精品福利观看| 精品国产成人av| 国产v综合v亚洲欧美久久| 韩曰欧美视频免费观看| 日本最新高清不卡中文字幕| 日韩精品在线免费| 成人在线中文字幕| 国产精品久久久久一区二区| 亚洲高清久久网| 亚洲欧美综合区自拍另类| 欧美激情第6页| 亚洲视频免费一区| 久久精品久久久久久| 97超碰蝌蚪网人人做人人爽| 欧美日韩亚洲天堂| 韩日精品中文字幕| 亚洲国产精品va在看黑人| 国模精品视频一区二区| 97久久精品人搡人人玩| 午夜精品久久久久久久白皮肤| 久久久亚洲精品视频| 亚洲美女激情视频| 国产一区二区在线免费| 国产精品流白浆视频| 亚洲成年人在线| 激情成人中文字幕| 亚洲欧洲免费视频| 欧美日韩国产123| 91在线中文字幕| 欧美在线一级va免费观看| 亚洲a在线播放| 欧美激情高清视频| 日韩av中文字幕在线免费观看| 欧美日韩人人澡狠狠躁视频| 中文字幕亚洲欧美一区二区三区| 国产精品一区二区av影院萌芽| 日本高清久久天堂| 另类视频在线观看| 欧美小视频在线观看| 中文字幕欧美精品日韩中文字幕| 92看片淫黄大片看国产片| 一区二区三区视频观看| 国产精品久久久久久久久久免费| 浅井舞香一区二区| 久久久国产一区| 92国产精品视频| 亚洲综合中文字幕68页| 亚洲偷欧美偷国内偷| 国产精品高清免费在线观看| 国内偷自视频区视频综合| 中文字幕一精品亚洲无线一区| 俺也去精品视频在线观看| 国产精品自拍网| 欧美性受xxx| 91成人国产在线观看| 久久九九有精品国产23| 成人黄色生活片| 亚洲国产成人在线播放| 国产精品r级在线| 2019中文字幕在线| 欧美日韩免费在线观看| 亚洲天堂免费视频| 欧美激情在线播放| 日韩在线欧美在线国产在线| 亚洲毛片在线观看| 亚洲成年人在线播放| 另类美女黄大片| 欧美性少妇18aaaa视频| 国产成人精品久久二区二区91| 亚洲国内高清视频| 欧美人与性动交a欧美精品| 精品国产一区二区三区久久久| 三级精品视频久久久久|