python戀愛代碼(利用Python給女票寫一個小說網站)
2023-06-04 15:52:20 1
開始的原因
女票愛看小說,最近沉迷一個小說論壇:91baby
每次都要打開瀏覽器進十分復古的網頁裡看
效果大概是這樣的:
我覺得這樣效果實在是有點差
就開始寫一個小說網站給她用
基本思路
主要用爬蟲獲取原網站的小說數據
之後排版後顯示在一個新的網頁裡
其實沒有什麼難度
主要想和大家分享一個開源項目:Toapi
項目主頁裡寫了一句話:Every web site provides APIs.
數據部分 :Toapi
Toapi 是一個開源項目, 可以快速將一個網站的數據整理變成可調用的api接口,將數據最終以json的形式返回
地址: https://github.com/gaojiuli/toapi
下面我來展示一下簡單的使用:
以91baby為例,我們需要解析小說的:
名字內容作者連結其實就是解析論壇的列表頁、詳情頁
在Toapi的框架裡
每項需要解析的數據都可以用一個item來表示
所以我們只需要定製好解析頁面的規則
剩下的都可以交給框架來處理
解析列表頁
class HotBook(Item): # 需要解析的欄位 __base_url__ = 'http://91baby.mama.cn' title =]/text[1]') author =]/text[1]') url =]/@href') book_id =]/@href') # `clean__xxx`方法是用來進一步格式化信息用的 def clean_title(self, title): if '《' in title: return title[title.find('\u300a') 1:title.find('\u300b')][:10] else: return '廣告貼' def clean_author(self, author): if ':' in author: return author[author.find(':') 1:author.find('(')] elif ':' in author: return author[author.find(':') 1:author.find('(')] else: return '廣告貼' def clean_book_id(self, book_id): return book_id.split('-')[1] class Meta: source =]') # 定義路由 左邊是我們內網的url,右邊是源站的url # 比如 我們訪問 www.api.url/hotbook?page=1 # 框架就會向 www.xxx.com/form-171-1.html 發送請求 route = {'/hotbook?page=:page': '/forum-171-:page.html'}
解析書籍詳情
class Book(Item): __base_url__ = 'http://91baby.mama.cn' title =]/div[3]/text[3]') author =]/div[3]/text[3]') total_page =]/div//a') contents =]') def clean_title(self, title): return title.split('《')[1].split('》')[0] def clean_author(self, author): index = author.find('作者:') 3 return author[index:] def clean_contents(self, contents): text = [] for item in contents: content = strip(item.xpath('string(.)')) if len(content) < 128: text.append('全書完結!!! 以下的內容是網友書評!') text.append(content) return text def clean_total_page(self, total_page): try: for index, page in enumerate(total_page): num = page.xpath('./text')[0] if num == '下一頁': i = int(index) - 1 break page = total_page[i].xpath('./text')[0] if '...' in page: return int(page.replace('... ', '')) return int(page) except: return 1 class Meta: source = None route = {'/book_id=:id?page=:page': '/thread-:id-:page-1.html'}
測試是否可以用
# Toapi 的入口from toapi import Apifrom items.hotbook import HotBookfrom items.book import Bookfrom settings import MySettingsapi = Api('', settings=MySettings)api.register(HotBook)api.register(Book)if __name__ == '__main__': api.serve # 運行程序# python app.py
這下,當我們訪問:http://127.0.0.1:5000/hotbook?page=1
就可以得到91baby論壇第一頁書籍數據了
並且數據會json的形式返回,方便我們調用
{ "HotBook": [ { "title": "\u5e7f\u544a\u8d34", "author": "\u5e7f\u544a\u8d34", "url": "http://91baby.mama.cn/thread-1502279-1-1.html", "book_id": "1502279" }, { "title": "\u5e7f\u544a\u8d34", "author": "\u5e7f\u544a\u8d34", "url": "http://91baby.mama.cn/thread-1502414-1-1.html", "book_id": "1502414" },}
用命令行展示的效果:

網頁web部分
數據部分處理好了,剩下的就是web頁面的搭建了
由於我是前端苦手,就網上找了一套別人開源寫好的模板
效果大概是這樣的:

配合追書神器的api還能顯示其他分類的小說

閱讀界面是這樣的

進群:960410445 即可獲取數十套PDF!
最後
由於沒錢買域名 也沒功夫去備案
網站就跑在騰訊雲學生伺服器上
由於上面還跑著其他很多測試程序
我就不把網站放出來給大家玩了
偷偷給我女票一個人用就行
,