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

这里提供一个参考,如果条件允许,还是支持宅们买纸质书来看比较爽,像我这们穷屌丝就只能想这些节省口袋的方式啦!

猜你喜欢

转载自blog.csdn.net/ymtianyu/article/details/105652987