提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
这个程序是去年8月份写的,之所以现在写这篇博客,是想记录下来我编写的过程,以及复习以下python的知识。
提示:以下是本篇文章正文内容,下面案例可供参考
关于python的基础知识,例如:三大流程,四大容器,函数,方法等,可以看看我之前的博客。
所谓小说下载器,实际上就是将一些网站上的在线阅读的小说,使用爬虫获取该网页的html文件,之后使用正则表达式提取出小说的正文,最后使用open()来保存小说内容到本地。
代码如下(示例):
import requests
import re
from os import path
import os
import time
代码如下(示例):
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模块来爬取需要下载的小说的网页
代码如下(示例):
filename=re.findall(r"",html.text)#获取书名
filename=str(filename)
filename = filename.replace('[', '').replace(']', '')
link = re.findall(r'.*?', html.text)#提取章节id
这一部分主要使用正则表达式来提取小说的书名,和章节id。在编写程序的时候要注意观察网页上章节的关系,有的是按照顺序,这种直接采取循环语句。还有的章节id可能没有任何关系,这种可以将所有的章节id提取出来将他们放到一个列表中,通过循环列表中的id来读取各个章节的内容从而来下载小说所有的内容。
代码如下(示例):
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来读取所有的章节内容,之后使用正则表达式来提取出纯净的内容,咳咳,正则表达式,用的不好,后面又使用了多次的替换。才获得比较纯净的文章。
代码如下(示例):
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
注意:这一部分也在循环语句中,采用的是获取一章写一章的方式。
整理到这里,感觉写这种程序主要对正则表达式的使用,其次的话,现在大多数的网站都会有反爬,所以的在第一个爬取html文件的时候设置了许多的障碍。对于这方面的知识就需要继续的学习和研究。