owllook -- 一個簡潔的網(wǎng)絡(luò)小說搜索引擎

owllook-demo

0.前言

偶爾內(nèi)容會更新在博客,文章博客地址點這里
事情的起因是這樣的,前段時間在把之前寫的一些同步網(wǎng)絡(luò)請求代碼改成異步的,用的是aiohttp,既然是請求,那請求什么呢,就百度吧,請求什么內(nèi)容呢,我隨手一輸自己最近看的一本小說,然后作為練手用,就做了這個,我將其取名為owllook,準(zhǔn)備做成一個推薦系統(tǒng),所以我就將其部署上去,這才有了這個網(wǎng)站。

上一篇介紹了自己在使用sanic過程中遇到的一些問題,這次就想介紹下這個owllook--novels_search,上面是演示demo,具體可以見http://www.owllook.net/
本項目純屬共享學(xué)習(xí)之用,不得用于商業(yè)!
首先我想說下目前的項目進(jìn)度:

v0.1已經(jīng)上線:

  • 小說的基本搜索解析功能
  • 搜索記錄
  • 緩存
  • 書架
  • 書簽
  • 登錄(暫時不開放注冊,可與我申請體驗

TODO:

  • [ ] 注冊
  • [ ] 閱讀書單
  • [ ] 手機端兼容
  • [ ] 推薦
  • [ ] 排行榜
  • [ ] 個人中心

1.介紹

owllook的思路很簡單,利用百度檢索出來的結(jié)果,進(jìn)行過濾解析后再展示,使用的技術(shù)如下:

  • sanic:基于Python 3.5+的異步web服務(wù)器,快快快
  • sanic_session:sanic的持續(xù)會話插件
  • vloop:sanic默認(rèn)使用uvloop,替代asyncio本身的loop
  • motor:異步的mongodb驅(qū)動
  • aiohttp:異步請求
  • aiocache:異步緩存,本項目改用了其中的decorator部分,緩存數(shù)據(jù)庫使用redis

對于用戶的一系列操作信息,使用mongodb進(jìn)行存儲,而緩存則使用redis

對于不同網(wǎng)站的小說,頁面規(guī)則都不盡相同,我希望能夠在代碼解析后再統(tǒng)一展示出來,這樣方便且美觀,而不是僅僅跳轉(zhuǎn)到對應(yīng)網(wǎng)站就完事,清新簡潔的閱讀體驗才是最重要的。

目前采用的是直接在百度上進(jìn)行結(jié)果檢索,也不是不能做的更大更全,只是覺得沒什么意義,目前的檢索結(jié)果已經(jīng)很足夠。

我盡量寫少量的規(guī)則來完成解析,具體見規(guī)則定義,遇到自己喜歡的小說網(wǎng)站,方便諸位添加解析。

一般都是在下班時間編寫這個項目,目前v0.1版本大概實現(xiàn)。

后期我準(zhǔn)備將基礎(chǔ)功能寫好之后,能夠?qū)崿F(xiàn)小說與kindle之間的對接。

2.解析

這個項目的思路與技術(shù)都比較簡單,但是小說網(wǎng)站的解析工作是很難全部解析完畢,下面我將舉個例子怎么具體的解析一個網(wǎng)站,歡迎各位添磚加瓦,請先看一遍規(guī)則定義
解析也很簡單,只要求有點html以及css基礎(chǔ)即可。

首先進(jìn)入網(wǎng)站http://www.owllook.net/
搜索:

01

注意第一條結(jié)果顯示未解析,這就是我們要解析的對象了,點擊進(jìn)入源網(wǎng)站,審查小說目錄對應(yīng)的元素,這里顯示的是:class="mulu_list,然后注意其content_url類型是0

02

進(jìn)入小說章節(jié)內(nèi)容頁面,審查元素可以看到id=htmlContent,所以content_selector=htmlContent

接下來進(jìn)入項目,打開config/rules.py文件,在RULES字典中加入:

'www.ybdu.com': Rules('0', {'class': 'mulu_list'}, {'id': 'htmlContent'}),

這時候再重啟服務(wù),刷新頁面:


03

可以看到未解析變成了已解析,這時候點擊進(jìn)入,會出現(xiàn)兩種情況:

  • 排版完整,不需要再寫樣式,此時請直接解析章節(jié)內(nèi)容
  • 排版不行,需要寫樣

現(xiàn)在我演示的這個鏈接排版就是顯示不行,請打開/static/novels/css/chapter.css文件,在編寫之前,請先看下面這張圖:

04

圖中.mulu_list1:打錯了表示區(qū)域1,.mulu_list1:表示區(qū)域3.

首先更改區(qū)域1的樣式,我已經(jīng)在代碼注釋寫了各個區(qū)域樣式代碼在哪,直接更改就行,比如:

/* 區(qū)域1 */
.mulu_list, .acss, .list, #xslist ul, .dirlist, .list-chapter, .list_box ul, #defaulthtml4 table, .article-list > dl, .update, #list .box, .bookcontent > dl, .listmain > dl, .ml_main > dl, #list dl, #chapter_list, .chapterlist, tbody, .mt10, .catalog, #readerlists {
    float: left;
    overflow: hidden;
    padding-bottom: 1px;
    margin: auto;
    background: #F6F4EC;
    border-radius: 15px;
}

可以看到加上了.mulu_list,以此類推,最后解析完畢之后如下圖:

05

注意章節(jié)內(nèi)容里面一些無關(guān)的鏈接以及原本網(wǎng)頁自帶的上一章下一章需要隱藏掉哦。

3.總結(jié)

功能還很簡單,解析的網(wǎng)站有很多,希望各位添磚加瓦,容我奉上項目地址:owllook--novels_search,歡迎issue和star。

僅供分享交流 不可用于商業(yè)用途

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,288評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 書本折角的地方一定要捋直了,衣服一定要疊整齊了,像這樣強迫癥的表現(xiàn),明星們也有的。不但如此,有的明星的強迫癥表現(xiàn)太...
    首席娛記閱讀 691評論 0 1
  • 親愛的李先生,自從跨年后這是我們分開后的五個月了吧,會想到那時候的我有多難受,此刻想到都有些心酸。奇怪,明明你對我...
    哇你好棒啊閱讀 237評論 0 0
  • 成長不是一夜就長大了,而是逐漸完成的,我喜歡走捷徑,那是因為我覺得假如有更好的辦法,為什么不用呢。有人說成長就是多...
    追求更好的生活閱讀 178評論 0 1