python程序-小说下载

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


写在之前

这个程序是去年8月份写的,之所以现在写这篇博客,是想记录下来我编写的过程,以及复习以下python的知识。


提示:以下是本篇文章正文内容,下面案例可供参考

一、基础知识

关于python的基础知识,例如:三大流程,四大容器,函数,方法等,可以看看我之前的博客。
所谓小说下载器,实际上就是将一些网站上的在线阅读的小说,使用爬虫获取该网页的html文件,之后使用正则表达式提取出小说的正文,最后使用open()来保存小说内容到本地。

二、编写代码

1.引入库

代码如下(示例):

import requests
import re
from os import path
import os
import time

2.读入数据

代码如下(示例):

print("\t\t\t$$$欢迎来到1.7版本,本版本可以自己在下载指定的小说$$$\t\t\t\n\n\n")


print("\t\t\t请在您的浏览器上面输入:www.23txt.com\t\t\t\n\n\n")

url=input("请输入您要下载的小说链接,例如:https://www.23txt.com/files/article/html/39/39976/:")
print("!!!请将你的命令提示符最大化,否则将引起您视觉上强烈不适!!!")
time.sleep(3)

s = requests.Session()
#https://www.23txt.com/files/article/html/39/43065/ 爬取网页的html文件

html = s.get(url)
html.encoding = 'gbk'  # 根据网页源代码中的格式来改

这部分代码主要是使用requests模块来爬取需要下载的小说的网页

3.获取书名和章节名

代码如下(示例):

filename=re.findall(r"<meta property=\"og:title\" content=\"(.*)\"/>",html.text)#获取书名
filename=str(filename)
filename = filename.replace('[', '').replace(']', '')



link = re.findall(r'<a href="(/files/article/html.*?\.html)">.*?</a>', html.text)#提取章节id

这一部分主要使用正则表达式来提取小说的书名,和章节id。在编写程序的时候要注意观察网页上章节的关系,有的是按照顺序,这种直接采取循环语句。还有的章节id可能没有任何关系,这种可以将所有的章节id提取出来将他们放到一个列表中,通过循环列表中的id来读取各个章节的内容从而来下载小说所有的内容。

4.通过循环语句来获取各个章节的内容

代码如下(示例):

for i in link:
    url = 'https://www.23txt.com' + i  # 下载章节 字符串连接网址

    # 网页源代码
    s1 = requests.Session()
    r1 = s1.get(url)
    r1.encoding = 'gbk'

    #提取章节名
    name = re.findall(r'<h1>(.*)</h1>', r1.text)[0]


    #提取正文
    chapters = re.findall(r'<div id="content">(.*?)</div>', r1.text, re.S)[0]

    #优化小说内容
    chapters = chapters.replace(' ', '')
    chapters = chapters.replace('<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;', '\n  ')
    chapters = chapters.replace('&nbsp;&nbsp;&nbsp;&nbsp;', '  ')
    chapters = chapters.replace('[', '').replace(']', '')


    s = str(chapters)
    s_replace = s.replace('<br/><br/> ', "\n")

这一部分主要通过拼接出来url来读取所有的章节内容,之后使用正则表达式来提取出纯净的内容,咳咳,正则表达式,用的不好,后面又使用了多次的替换。才获得比较纯净的文章。

5.写入文件

代码如下(示例):

save_path='C:\\小说'#创建存储路径

    #判断存储文件夹是否在
    if path.exists(save_path):
        with open(save_path+"\\{}.txt".format(filename), "a", encoding='UTF-8') as f:
            f.write('\t' + str(name) + '\t\n')
        with open(save_path+"\\{}.txt".format(filename), "a", encoding='UTF-8') as f:
            f.write(s_replace+'\n')
        print("-$下载完毕$-\t\t\t\t\t{}\t\t\t\t\t-$下载完毕$-\n\n\n".format(name))
    else:
        os.makedirs(save_path)
        print(save_path+"\\{}.txt".format(filename))
        with open(save_path+"\\{}.txt".format(filename), "a", encoding='UTF-8') as f:
            f.write('\t' + str(name) + '\t\n')
        with open(save_path+"\\{}.txt".format(filename), "a", encoding='UTF-8') as f:
            f.write(s_replace+'\n')
        print("-$下载完毕$-\t\t\t\t\t{}\t\t\t\t\t-$下载完毕$-\n\n\n".format(name

注意:这一部分也在循环语句中,采用的是获取一章写一章的方式。

6.打包文件

安装pyinstaller包
在这里插入图片描述
打包文件,配上相应的图标

在这里插入图片描述

总结

整理到这里,感觉写这种程序主要对正则表达式的使用,其次的话,现在大多数的网站都会有反爬,所以的在第一个爬取html文件的时候设置了许多的障碍。对于这方面的知识就需要继续的学习和研究。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值