30行js爬取頂點全網任意小說

以前連續多篇文章介紹客戶端爬取平臺(dspider),今天咱們從零開始,實現爬取頂點小說網任意一本小說的功能。javascript

若是你還不知道客戶端爬取,能夠先看下個人前幾篇博客:css

爬蟲技術( 一) 一篇文章瞭解爬蟲技術現狀html

爬蟲技術(二) 客戶端爬蟲java

爬蟲技術(三)-客戶端爬取Android SDK發佈android

客戶端爬蟲 ios sdk 發佈了!ios

客戶端爬取-答網友問git

DSpider簡介github

集成sdk

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文檔

介紹頁添加爬取按鈕

爲了啓動爬取,咱們在介紹頁添加一個爬取按鈕,原來的介紹頁以下:

介紹頁.png

由於在進入目錄頁會自動爬取,因此咱們只須要將進入章節目錄的按鈕文字變一下,同時爲了醒目,背景換成綠色。

修改後的介紹頁.png

具體代碼:

$(".more a").text("爬取本書").css("background","#1ca72b");複製代碼

目錄頁爬取

  1. 在目錄頁咱們獲取全部章節的url。

    var list = $(".chapter li a");複製代碼
  2. 而後經過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()
    }
})複製代碼

怎麼樣,簡單強大吧!

咱們看看運行效果:

Screenshot_20170330-165659.png

爬取成功後,我將數據保存在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一下哦。

相關文章
相關標籤/搜索