以前連續多篇文章介紹客戶端爬取平臺(dspider),今天咱們從零開始,實現爬取頂點小說網任意一本小說的功能。javascript
若是你還不知道客戶端爬取,能夠先看下個人前幾篇博客:css
爬蟲技術(二) 客戶端爬蟲java
爬蟲技術(三)-客戶端爬取Android SDK發佈android
客戶端爬取-答網友問git
DSpider簡介github
dspider官方網站有詳細的集成文檔, 並提供了demo, 咱們本節的示例基於該demo開始,請先下載相應平臺的demo(github),下面是集成文檔:ajax
ios: dspider.dtworkroom.com/document/io…api
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一下哦。