Python爬蟲自學筆記:爬取小說(四)



v1.2及之前版本主要是爬取小說單章節內容並下載到本地保存為txt文件,主要熟悉了Python爬蟲的基本代碼,但缺少實用性。

個人觀點:對於小說爬取,主要有兩個方面可以嘗試進一步優化,一是直接在可提供下載txt鏈接的小說網站直接爬取txt文件,可節省代碼運行時間;二是對於還在更新中的小說,不定時檢測小說更新狀態,並推送最新更新信息,可嘗試通過郵件、微信、短信等方式推送信息。

1 功能及版本說明

功能:提供小說名稱,檢索小說網站,爬取網站小說txt鏈接,並下載。

版本:v1.4

更新說明:

在可提供txt鏈接的小說網站進行爬取小說鏈接進行下載。

2 開發環境

開發環境:Python3和PyCharm;

3 網站介紹及分析

網上搜索了一下,可實現小說txt下載的網站較多,這裡以無限小說網為例,網址為:https://www.555x.org/。

選擇一本小說,其小說主頁面網址為:https://www.555x.org/html/xuanhuan/txt16089.html;下載頁面網址為:https://www.555x.org/down/16089.html。由此可以看出,每一本小說有唯一對應編號,《卡徒》的編號為16089。

Python爬蟲自學筆記:爬取小說(四)

Python爬蟲自學筆記:爬取小說(四)

查看下載地址源碼,具體如下:

Python爬蟲自學筆記:爬取小說(四)

從圖中可以看出,小說txt下載鏈接為:https://www.555x.org/home/down/txt/id/16089,其代碼結構很簡單,網址中"16089"編號代表小說《卡徒》,網址中其他固定不變,只改變最後編號可以對其他小說進行下載。

嘗試改變了一下編號,發現"16090"編號是小說《調教初唐》,"16088"編號書籍不存在,由此可以嘗試對全站小說嘗試進行下載。

4 編碼思路

1) 提供小說名稱;

2) 在小說網站檢索小說,提取小說對應編號;

3) 下載小說;

5 代碼實現(1)

實現下說下載的代碼:

<code>if __name__ == "__main__":
    start_time = time.time()
    r = requests.get("https://www.555x.org/home/down/txt/id/16089")
    print(r.status_code)
    print(r.encoding)
    with open("a.txt","a",encoding="ISO-8859-1") as f:
        f.write(r.text)
    end_time = time.time()
    print("下載時間:" + str(round(end_time - start_time))  + "s")/<code>

非完整代碼,後續其他功能嘗試成功後會陸續更新。

6 代碼問題彙總

小說下載後保存下來的txt為亂碼,查看下載網址反饋的編碼格式為ISO-8859-1,在寫入本地txt時進行編碼格式定義。

7 相關學習知識點

小說網站編碼格式的查看:r.encoding;

8 結束語

本次代碼只是實現了根據小說下載鏈接對小說進行下載,代碼較簡單;在之後要完善小說的檢索代碼,即提供輸入窗口,輸入小說名稱,在網站檢索小說,提取下載鏈接。

將此次編碼的過程及源碼分享給大家,供大家參考。對於錯誤的地方,或有更好的建議,希望大家提出來,不勝感激!


分享到:


相關文章: