0.前言
偶爾內(nèi)容會(huì)更新在博客,文章博客地址點(diǎn)這里
事情的起因是這樣的部默,前段時(shí)間在把之前寫的一些同步網(wǎng)絡(luò)請(qǐng)求代碼改成異步的,用的是aiohttp
造虎,既然是請(qǐng)求傅蹂,那請(qǐng)求什么呢,就百度吧算凿,請(qǐng)求什么內(nèi)容呢份蝴,我隨手一輸自己最近看的一本小說(shuō),然后作為練手用氓轰,就做了這個(gè)婚夫,我將其取名為owllook
,準(zhǔn)備做成一個(gè)推薦系統(tǒng)戒努,所以我就將其部署上去请敦,這才有了這個(gè)網(wǎng)站。
上一篇介紹了自己在使用sanic
過程中遇到的一些問題储玫,這次就想介紹下這個(gè)owllook--novels_search侍筛,上面是演示demo,具體可以見http://www.owllook.net/
本項(xiàng)目純屬共享學(xué)習(xí)之用撒穷,不得用于商業(yè)匣椰!
首先我想說(shuō)下目前的項(xiàng)目進(jìn)度:
v0.1已經(jīng)上線:
- 小說(shuō)的基本搜索解析功能
- 搜索記錄
- 緩存
- 書架
- 書簽
- 登錄(暫時(shí)不開放注冊(cè),可與我申請(qǐng)?bào)w驗(yàn))
TODO:
- [ ] 注冊(cè)
- [ ] 閱讀書單
- [ ] 手機(jī)端兼容
- [ ] 推薦
- [ ] 排行榜
- [ ] 個(gè)人中心
1.介紹
owllook
的思路很簡(jiǎn)單端礼,利用百度檢索出來(lái)的結(jié)果禽笑,進(jìn)行過濾解析后再展示,使用的技術(shù)如下:
- sanic:基于Python 3.5+的異步web服務(wù)器蛤奥,快快快
- sanic_session:sanic的持續(xù)會(huì)話插件
- vloop:sanic默認(rèn)使用uvloop佳镜,替代asyncio本身的loop
- motor:異步的mongodb驅(qū)動(dòng)
- aiohttp:異步請(qǐng)求
- aiocache:異步緩存,本項(xiàng)目改用了其中的decorator部分凡桥,緩存數(shù)據(jù)庫(kù)使用redis
對(duì)于用戶的一系列操作信息蟀伸,使用mongodb
進(jìn)行存儲(chǔ),而緩存則使用redis
缅刽。
對(duì)于不同網(wǎng)站的小說(shuō)啊掏,頁(yè)面規(guī)則都不盡相同,我希望能夠在代碼解析后再統(tǒng)一展示出來(lái)衰猛,這樣方便且美觀迟蜜,而不是僅僅跳轉(zhuǎn)到對(duì)應(yīng)網(wǎng)站就完事,清新簡(jiǎn)潔的閱讀體驗(yàn)才是最重要的啡省。
目前采用的是直接在百度上進(jìn)行結(jié)果檢索娜睛,也不是不能做的更大更全髓霞,只是覺得沒什么意義,目前的檢索結(jié)果已經(jīng)很足夠微姊。
我盡量寫少量的規(guī)則來(lái)完成解析酸茴,具體見規(guī)則定義,遇到自己喜歡的小說(shuō)網(wǎng)站兢交,方便諸位添加解析薪捍。
一般都是在下班時(shí)間編寫這個(gè)項(xiàng)目,目前v0.1
版本大概實(shí)現(xiàn)配喳。
后期我準(zhǔn)備將基礎(chǔ)功能寫好之后酪穿,能夠?qū)崿F(xiàn)小說(shuō)與kindle之間的對(duì)接。
2.解析
這個(gè)項(xiàng)目的思路與技術(shù)都比較簡(jiǎn)單晴裹,但是小說(shuō)網(wǎng)站的解析工作是很難全部解析完畢被济,下面我將舉個(gè)例子怎么具體的解析一個(gè)網(wǎng)站,歡迎各位添磚加瓦涧团,請(qǐng)先看一遍規(guī)則定義只磷。
解析也很簡(jiǎn)單,只要求有點(diǎn)html以及css基礎(chǔ)即可泌绣。
首先進(jìn)入網(wǎng)站http://www.owllook.net/
搜索:
注意第一條結(jié)果顯示未解析钮追,這就是我們要解析的對(duì)象了,點(diǎn)擊進(jìn)入源網(wǎng)站阿迈,審查小說(shuō)目錄對(duì)應(yīng)的元素元媚,這里顯示的是:class="mulu_list
,然后注意其content_url
類型是0
進(jìn)入小說(shuō)章節(jié)內(nèi)容頁(yè)面苗沧,審查元素可以看到id=htmlContent
刊棕,所以content_selector=htmlContent
接下來(lái)進(jìn)入項(xiàng)目,打開config/rules.py
文件待逞,在RULES字典中加入:
'www.ybdu.com': Rules('0', {'class': 'mulu_list'}, {'id': 'htmlContent'}),
這時(shí)候再重啟服務(wù)甥角,刷新頁(yè)面:
可以看到未解析變成了已解析,這時(shí)候點(diǎn)擊進(jìn)入识樱,會(huì)出現(xiàn)兩種情況:
- 排版完整蜈膨,不需要再寫樣式,此時(shí)請(qǐng)直接解析章節(jié)內(nèi)容
- 排版不行牺荠,需要寫樣
現(xiàn)在我演示的這個(gè)鏈接排版就是顯示不行,請(qǐng)打開/static/novels/css/chapter.css
文件驴一,在編寫之前休雌,請(qǐng)先看下面這張圖:
圖中.mulu_list1:打錯(cuò)了表示區(qū)域1,.mulu_list1:表示區(qū)域3.
首先更改區(qū)域1的樣式肝断,我已經(jīng)在代碼注釋寫了各個(gè)區(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)容里面一些無(wú)關(guān)的鏈接以及原本網(wǎng)頁(yè)自帶的上一章下一章需要隱藏掉哦恰响。
3.總結(jié)
功能還很簡(jiǎn)單,解析的網(wǎng)站有很多涌献,希望各位添磚加瓦胚宦,容我奉上項(xiàng)目地址:owllook--novels_search,歡迎issue和star燕垃。
僅供分享交流 不可用于商業(yè)用途