python程序-小说下载

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

文章目录

  • 写在之前
  • 一、基础知识
  • 二、编写代码
    • 1.引入库
    • 2.读入数据
    • 3.获取书名和章节名
    • 4.通过循环语句来获取各个章节的内容
    • 5.写入文件
    • 6.打包文件
  • 总结


写在之前

这个程序是去年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"",html.text)#获取书名
filename=str(filename)
filename = filename.replace('[', '').replace(']', '')



link = re.findall(r'.*?', 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'

(.*)

'
, r1.text)[0] #提取正文 chapters = re.findall(r'
(.*?)
'
, r1.text, re.S)[0] #优化小说内容 chapters = chapters.replace(' ', '') chapters = chapters.replace('

    '
, '\n ') chapters = chapters.replace('    ', ' ') chapters = chapters.replace('[', '').replace(']', '') s = str(chapters) s_replace = s.replace('

'
, "\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文件的时候设置了许多的障碍。对于这方面的知识就需要继续的学习和研究。

你可能感兴趣的:(python,python)