小说下载器 - 8AReading 项目分析
项目概述
NovelDownloadProgrammer 是一个功能完整的小说下载工具,专为8AReading网站设计,支持异步并发爬取小说章节、自动合并内容、实时进度显示等功能。该项目提供了两种使用方式:Web界面和GUI界面,满足不同用户的操作习惯。

项目结构
NovelDownloadProgrammer/
├── templates/
│ └── index.html # Web界面模板
├── Novel_download_8AReading_v3.14.py # 核心下载脚本
├── app.py # Flask Web应用
├── novel_download_gui.py # Tkinter GUI应用
└── 小说下载器应用封面.jpeg # 应用封面图片
核心功能模块
1. 异步并发爬取模块
核心实现:使用aiohttp和asyncio实现异步并发下载,提高爬取效率。
async def download_all_chapters_async(chapter_list):
# 初始化并发信号量
semaphore = asyncio.Semaphore(CONCURRENT_LIMIT)
# 批量创建异步任务并执行
async with aiohttp.ClientSession() as session:
tasks = [asyncio.create_task(bounded_task(url, idx)) for idx, url in enumerate(chapter_list, 1)]
results = await asyncio.gather(*tasks)
特点:
- 支持并发限制(默认10个并发)
- 自动重试机制(最大3次)
- 实时进度显示
- 耗时统计
2. 内容解析与处理模块
核心实现:使用BeautifulSoup解析HTML,支持Base64解密内容。
async def get_single_page_content_async(session, url):
# 获取网页解析对象
soup = await get_html_soup_async(session, url)
# 正则匹配Base64加密字符串
b64_match = re.search(r'str_decode\("(.+?)"\)', html_text)
# Base64解码正文
b64_str = b64_match.group(1)
decoded_html = base64.b64decode(b64_str).decode("utf-8")
# 提取纯文本并清洗格式
content = BeautifulSoup(decoded_html, "html.parser").get_text()
特点:
- 支持Base64解密
- 自动清洗文本格式
- 处理分页内容合并
3. 目录爬取模块
核心实现:动态解析目录分页,获取所有章节链接。
def get_all_chapter_urls():
# 解析select标签,获取所有分页option
select_tag = main_soup.find("select", id="indexselect")
if select_tag:
options = select_tag.find_all("option")
mulu_value = len(options) # 总页数
# 遍历所有目录分页
for page in range(1, mulu_value + 1):
url = BOOK_URL if page == 1 else f"{BOOK_URL.rsplit('.', 1)[0]}/{page}.html"
特点:
- 动态获取目录分页总数
- 实时显示目录爬取进度
- 自动提取小说标题
4. 文件处理模块
核心实现:单章节保存为独立TXT,最终自动合并。
async def merge_chapters(results, save_file):
# 创建并写入总文件头部
async with aiofiles.open(save_file, "w", encoding="utf-8") as f:
# 遍历合并所有章节
for idx, title, temp_file in results:
if os.path.exists(temp_file):
async with aiofiles.open(temp_file, "r", encoding="utf-8") as temp_f:
content = await temp_f.read()
await f.write(content)
# 删除临时文件
os.remove(temp_file)
特点:
- 自动清理临时文件
- 按章节顺序合并
- 美观的文件头部格式
界面实现
1. Web界面
技术栈:Flask + HTML + CSS + JavaScript
核心功能:
- 实时进度显示
- SSE(Server-Sent Events)实时更新
- 响应式设计
- 美观的UI界面
关键实现:
@app.route('/download_stream')
def download_stream():
book_url = request.args.get('book_url')
def generate():
# 运行脚本并捕获输出
process = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True,
cwd=os.path.dirname(__file__)
)
# 实时读取输出并发送
while True:
line = process.stdout.readline()
if not line:
break
# 发送SSE事件
yield f"data: {line.strip()}\n\n"
return Response(generate(), mimetype='text/event-stream')
2. GUI界面
技术栈:Tkinter
核心功能:
- 直观的图形界面
- 实时进度条
- 输出信息展示
- 线程隔离(避免界面卡顿)
关键实现:
def download_task(self):
try:
# 重定向stdout到我们的输出函数
class StdoutRedirector:
def write(self, text):
if text.strip():
self.gui.append_output(text.strip())
def flush(self):
pass
redirector = StdoutRedirector()
redirector.gui = self
sys.stdout = redirector
# 执行下载任务
chapter_list = get_all_chapter_urls()
results = asyncio.run(download_all_chapters_async(chapter_list))
asyncio.run(merge_chapters(results, SAVE_FILE))
finally:
# 恢复原始stdout
sys.stdout = original_stdout
技术亮点
- 异步并发:使用
asyncio和aiohttp实现高效的异步并发下载,大幅提升爬取速度 - 多界面支持:同时提供Web界面和GUI界面,满足不同用户需求
- 实时进度:通过SSE和线程技术实现实时进度显示
- 容错机制:实现了请求重试、异常捕获等容错机制
- 用户体验:美观的界面设计和流畅的操作体验
- 智能处理:自动提取小说标题、动态解析分页、自动合并内容
性能优化
- 并发控制:通过信号量限制并发数,避免对服务器造成过大压力
- 异步I/O:使用
aiofiles进行异步文件操作,提高I/O效率 - 内存管理:单章节保存为临时文件,避免内存占用过大
- 网络优化:合理设置超时时间和重试机制
使用方法
Web界面
- 启动Flask应用:
python app.py - 打开浏览器访问
http://localhost:5000 - 输入小说目录页URL,点击"开始下载"按钮
- 等待下载完成,查看输出信息
GUI界面
- 运行GUI应用:
python novel_download_gui.py - 在输入框中填写小说目录页URL
- 点击"开始下载"按钮
- 查看进度条和输出信息
命令行
python Novel_download_8AReading_v3.14.py <小说目录页URL>
依赖项
- Python 3.7+
- aiohttp
- beautifulsoup4
- requests
- flask
- tkinter (Python标准库)
项目价值
- 学习价值:展示了异步编程、Web开发、GUI开发等多种技术的综合应用
- 实用价值:提供了一个功能完整的小说下载工具
- 技术参考:为类似的爬虫项目提供了参考实现
代码优化建议
- 异常处理增强:增加更详细的异常类型捕获和处理
- 配置外部化:将配置参数移至配置文件,方便用户修改
- 日志系统:实现更完善的日志系统,便于问题排查
- 多网站支持:扩展支持更多小说网站
- 缓存机制:实现缓存机制,避免重复请求
总结
NovelDownloadProgrammer 是一个设计合理、功能完整的小说下载工具,通过异步并发技术提高了下载效率,同时提供了友好的用户界面。该项目展示了如何将多种Python技术(异步编程、Web开发、GUI开发)结合起来,构建一个实用的应用程序。
该项目不仅具有实用价值,也是学习Python各种技术的优秀案例,特别是在异步编程和多界面实现方面。
项目地址:https://github.com/Silent-GitHub01/NovelDownloadProgrammer.git
开发环境:Python 3.7+, Windows
适用网站:8AReading (https://www.8ayd.com/)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)