之前連續多篇文章介紹客戶端爬取平臺(dspider),今天我們從零開始,實現爬取頂點小說網任意一本小說的功能。
如果你還不知道客戶端爬取,可以先看下我的前幾篇部落格:
整合sdk
dspider官方網站有詳細的整合文件, 並提供了demo, 我們本節的示例基於該demo開始,請先下載相應平臺的demo(github),下面是整合文件:
ios: dspider.dtworkroom.com/document/io…
android: dspider.dtworkroom.com/document/an…
如何整合、爬取文章中很詳細,下面我們主要看一下如何寫爬取指令碼
編寫爬取指令碼
分析網頁
由於我們爬取的手機版網站,開啟頂點小說主頁 m.23us.com/ ,為了簡單起見,我們在進入具體小說的目錄頁後就開始爬取。下面以《擇天記》為例:
介紹頁url:m.23us.com/book/52234
我們提取特徵字串“/book/”。
目錄頁url: m.23us.com/html/52/522…
我們提取小說目錄頁url特徵"html/數字/數字/"。
那麼基本的爬取流程如下:
//我們將小說標題作為sessionKey
var sessionKey="小說標題"
dSpider(sessionKey, function(session,env,$){
//在介紹頁
if(location.href.indexOf("/book/")!=-1){
//新增爬取按鈕
}else if(/.+html\/\d+\/\d+\/$/.test(location.href)) {
//目錄頁自動開始爬取
}
})複製程式碼
dSpider為指令碼爬取的入口函式,類似於c裡面的main函式,詳細的請移步dspider javascript api文件 。
介紹頁新增爬取按鈕
為了啟動爬取,我們在介紹頁新增一個爬取按鈕,原來的介紹頁如下:
因為在進入目錄頁會自動爬取,所以我們只需要將進入章節目錄的按鈕文字變一下,同時為了醒目,背景換成綠色。
具體程式碼:
$(".more a").text("爬取本書").css("background","#1ca72b");複製程式碼
目錄頁爬取
在目錄頁我們獲取所有章節的url。
var list = $(".chapter li a");複製程式碼
然後通過ajax請求每一個url,獲取資料並解析
$.get(e.attr("href")).done(function (data) { //獲取章節名 var text = e.text().trim() + "\r\n"; //獲取正文,進行格式處理 text+= $(data).find("#txt").html() .replace(/ /g," ").replace(/<br>/g,"\n")+"\r\n"; //將資料傳遞給端 session.push(text) })複製程式碼
在爬取的時候,我們輸出進度訊息給端,完整的程式碼如下:
var sessionKey=dQuery(".index_block h1").text()
dSpider(sessionKey, function(session,env,$){
if(location.href.indexOf("/book/")!=-1){
$(".more a").text("爬取本書").css("background","#1ca72b");
}else if(/.+html\/\d+\/\d+\/$/.test(location.href)) {
log(sessionKey)
var list = $(".chapter li a");
session.showProgress();
session.setProgressMax(list.length);
var curIndex = 0
function getText() {
var e = list.eq(list.length-curIndex-1);
$.get(e.attr("href")).done(function (data) {
var text = e.text().trim() + "\r\n";
text+= $(data).find("#txt").html()
.replace(/ /g," ").replace(/<br>/g,"\n")+"\r\n";
session.push(text)
}).always(function () {
if (++curIndex < list.length) {
session.setProgress(curIndex);
session.setProgressMsg("正在爬取《"+sessionKey+"》 "+e.text())
getText();
} else {
session.setProgress(curIndex);
session.finish();
}
})
}
getText()
}
})複製程式碼
怎麼樣,簡單強大吧!
我們看看執行效果:
爬取成功後,我將資料儲存在txt中,然後用qq閱讀開啟
指令碼已經發布到了爬蟲商店:dspider.dtworkroom.com/spider/12
整合注意事項
下載的demo預設的包名是:wendu.dspiderdemo, appid是5,這是官方賬號下的app。 如果你要換包名,需要在後臺先建立應用,建立好之後獲得appid, 將sdk初始化時的appid換成你自己的appid,然後在爬蟲商店找到“頂點小說”,然後將它新增到你的應用,這一步很重要,否則你的應用就沒有執行該爬蟲的許可權。 我們在“頂點小說”詳情頁獲取其id(12),然後在demo中將sid換成12就可以了。爬取的結果可以自己拼接儲存在txt中。
ps:別忘了star一下哦。