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/
搜索:
注意第一條結(jié)果顯示未解析,這就是我們要解析的對象了,點擊進(jìn)入源網(wǎng)站,審查小說目錄對應(yīng)的元素,這里顯示的是:class="mulu_list
,然后注意其content_url
類型是0
進(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ù),刷新頁面:
可以看到未解析變成了已解析,這時候點擊進(jìn)入,會出現(xiàn)兩種情況:
- 排版完整,不需要再寫樣式,此時請直接解析章節(jié)內(nèi)容
- 排版不行,需要寫樣
現(xiàn)在我演示的這個鏈接排版就是顯示不行,請打開/static/novels/css/chapter.css
文件,在編寫之前,請先看下面這張圖:
圖中.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
,以此類推,最后解析完畢之后如下圖:
注意章節(jié)內(nèi)容里面一些無關(guān)的鏈接以及原本網(wǎng)頁自帶的上一章下一章需要隱藏掉哦。
3.總結(jié)
功能還很簡單,解析的網(wǎng)站有很多,希望各位添磚加瓦,容我奉上項目地址:owllook--novels_search,歡迎issue和star。
僅供分享交流 不可用于商業(yè)用途