tags:應(yīng)用
哎呀,才發(fā)現(xiàn)我的輸入法很奇葩悟衩,我本來(lái)想寫(xiě)“爬爬爬”的剧罩,怎么輸入成“啪啪啪”了呢?
不管了座泳,像下面這樣少兒不宜的內(nèi)容惠昔,也只能在簡(jiǎn)書(shū)的編輯們休息的時(shí)候偷偷發(fā)表了。
是這樣的挑势,我準(zhǔn)備從簡(jiǎn)書(shū)抓點(diǎn)她沒(méi)提供的內(nèi)容镇防,因此想從頭做一個(gè)爬蟲(chóng)。
考慮到j(luò)avascript是最好的語(yǔ)言潮饱,所以決定用javascript来氧。在github 上簡(jiǎn)單搜了一下,發(fā)現(xiàn)node-crawler 是star排名第一的爬蟲(chóng)香拉。簡(jiǎn)單看了一下啦扬,發(fā)現(xiàn)這個(gè)包貌似不錯(cuò),事前的爬和事后的解析貌似都可以做缕溉。就用它了考传。
首先,假設(shè)你的 node/NPM已經(jīng)配置好证鸥。如何沒(méi)有配置好的話(huà)僚楞,找一篇node入門(mén)教程看看吧勤晚。
第二步,創(chuàng)建一個(gè)package.json文件泉褐,內(nèi)容很簡(jiǎn)單:
{
"name": "簡(jiǎn)書(shū)爬蟲(chóng)", //名字隨便取的
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "MIT",
"dependencies": {
"crawler": "^1.0.3"
}
}
第三步, 創(chuàng)建app.js赐写,內(nèi)容也很簡(jiǎn)單:
var Crawler = require("crawler")
var url = require('url')
var c = new Crawler({
maxConnections : 10,
callback : function (error, res, done) {
if(error){
console.log(error)
}else{
this.proccedResponse(res)
}
done()
},
proccedResponse:function(res){
var $ = res.$
console.log($("title").text())
var that = this
$('a').each(function(index, a) {
var url = $(a).attr('href')
if (typeof url != 'undefined'
&& url.indexOf('jianshu.com')>0
){
that.procceedUrl(url)
}
})
},
procceedUrl: function(url){
console.log('proceed:'+url)
c.queue(url)
}
})
c.queue('http://www.reibang.com')
代碼少得令人發(fā)指:先抓簡(jiǎn)書(shū)首頁(yè),然后分析網(wǎng)頁(yè)內(nèi)容中所有的a標(biāo)簽膜赃,有href的繼續(xù)抓挺邀。簡(jiǎn)單的不像爬蟲(chóng):)
好了,現(xiàn)在可以運(yùn)行你的爬蟲(chóng)了跳座。
在終端中運(yùn)行node app.js
看到了什么端铛?是不是很多很多的title和標(biāo)題?恭喜你疲眷,成功了禾蚕。
后續(xù)你可以對(duì)這個(gè)爬蟲(chóng)做各種改進(jìn),前途不可限量狂丝。當(dāng)然了换淆,小心別被簡(jiǎn)叔看到,否則被封IP或者刪賬號(hào)我就沒(méi)辦法了几颜,哈哈倍试!