Python電子書下載

寫在前面的話

相信很多的宅們看電子書是必不可少的一個項目,咱也不例外,只是有些書只能在線讀,沒有下載鏈接,總不能一頁頁的複製吧,不符合咱的行事風格,請出 Python幫咱們複製嘍!

命名空間

大概分析了幾個讀書網站的源代碼格式,找到一些基本規律,不能適用所有,看宅們的水平了,咱這裏只是一般讀書網站的代碼處理

import requests
from lxml import etree

這兩個差不多就夠了,一個用來獲取網頁內容,一個用來分析Dom樹結構,找到我們想要的章節內容

先來一個方法

def getHtmlByUrl(url):
    rResponse = requests.get(url)
    rResponse.encoding = "utf-8" #中文很多時候會出現亂碼,嘗試使用utf-8編碼讀取內容
    rHtml = etree.HTML(rResponse.content) #text有時候取不到值,故這裏使用content
    return rHtml

根據 Url 來獲取網頁的內容,只有得到網頁源代碼,咱們才能取得想要的不是

定義幾個初始化變量

因爲我寫了幾個網站的,爲了代碼共享的方便,宅們沒這個需求也可以直接把xpath語句寫在代碼中

baseUrl = ""  #正常獲取到的章節鏈接都是短鏈接,要拼接上網站域名才能正常獲取每一章的內容,記得填寫哦!
listPath = '//*[@id="list"]/dl/dd'  #根據網頁內容的不同,章節目錄所在節點可能有差異,視情況修改
titlePath = "a/text()" #同上,視情況修改
hrefPath = "a/@href" #同上,視情況修改
contentPath = '//*[@id="content"]/text()' #同上,視情況修改

直接上代碼

url = "http://..."  #這裏填上你想要複製的書目章節目錄鏈接
html = getHtmlByUrl(url)
lstCapture = html.xpath(listPath)
for capture in lstCapture:
    # 獲取章節標題
    aTitle = capture.xpath(titlePath)[0]
    print(aTitle)
    # 獲取章節鏈接
    aHref = capture.xpath(hrefPath)[0]
    newUrl = baseUrl + aHref
    #處理文章內容特殊鏈接,如果沒有這個需求,可以把這個刪除,具體鏈接樣式和處理方式要看你的網頁內容
    if aHref.find('https') >= 0:
       newUrl = aHref
    print(newUrl)
    newHtml = getHtmlByUrl(newUrl)
    # 獲取章節內容
    newContent = newHtml.xpath(contentPath)
    strContent = aTitle + '\n'
    # 處理文章內容拼接成文本可讀格式,不然出來的樣子可能有點可讀性不高
    for strLine in newContent:
        if strLine.strip() != "":
            strContent += strLine.replace('\n','').replace('\r','') + '\n'
    # 寫入到文本文件
    with open("yourBookName.txt", 'a', encoding='utf-8') as f:
        f.write(strContent + '\n')

PS

這裏提供一個參考,如果條件允許,還是支持宅們買紙質書來看比較爽,像我這們窮屌絲就只能想這些節省口袋的方式啦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章