2022.3.18后开始了全面重构,当作学习了
原理是爬取用图片代替文字的小说网页内容,建立文字和图片的映射。最后替换图片标签和整理顺序后输出小说内容
使用方法暂时只有命令行操作,现在还在开发中...
因为改成了逆向js后直接爬取网页,相较使用selenium的自动化模拟效率会高出不少。
以下是项目的主要思路和代码逻辑(包含了未填的坑)
略过了观察网页代码,抓包观察数据以及逆向js代码等繁琐过程。获取字库就是大批量扫面图片并保存md5,人肉识别相应字和ocr辅助。逆向则是观察出乱序页面会包括一个新js的引入,逆向了一个sojsonv5加密的js后得到了相关排序逻辑
逆向方法参考 ; https://www.vlwx.com/202.html
- 通过小说链接爬取小说,章节
- 清理小说中的推广文本 / 格式化
- 友善的交互方式
- 添加需要动态验证的分流网页解析
- 添加自动获取发布页替换传入的失效源地址
- 小说保存扩展
- config功能
- 小说分卷使用追加模式写入(需要重写小部分逻辑)
传入URL后使用正则表达式校验URL并提取pathname部分,测试能否链接。将测试成功后的页面结果使用html解析库BeautifulSoup分析出作者,标题,分卷信息,页面内容,是否乱序等信息。然后将图片标签替换成相应的文本,最后输出为文件
正则表达式和明文替换可以考虑制作静态页面实现自行补充内容,提供案例测试,接收pr提交等功能。客户端自行更新字库,推广banlist等资源
使用正则表达式结合直接替换的方式将大部分同型字等嵌入推广替换,将替换为空白后的文章多出的空行,章节页面间的换行进行替换。
提供基础命令行交互,配备readme 和 doc说明文档 以及命令行辅助提示。
feature : 使用flask等技术启动网页可视化操作,以及小说管理等功能
首先代码分成 common
,core
,model
,processor
四个模块
提供如全局变量,日志管理,以及封装包括网络访问, 字符判空等可通用方法的工具类
代码中的承载数据的实体类,如章节chapter, 小说novel
爬虫 / 校验url等模块在未形成一定规模前暂时也放在core
中
将其余模块功能合并概括出一个易用的类,提供给命令行等交互方式进行操作
该处可能需要动态更新资源所以当前分包可能还不妥善
文本处理器相关模块的包,包括图片标签替换,html页面解析模块,以及字库静态资源模块
代码运行流程如下,总体4步,中间有更多具体流程
-
传入小说链接 - parser
- 正则表达式校验链接合法
- 获取链接路径文件名以确认为需求链接,并屏蔽链接页数等细节直接获取小说主页
- 返回URL路径文件名等参数元组,为解析类添加更易懂的参数
-
获取小说内容 - spider
- 实例化url解析类,测试该URL是否可正确访问
- 从小说主页中获取作者,标题,分卷等信息。获取失败则抛出链接错误的异常
- 根据需求解析单章 或 根据分卷信息循环解析单章拼接以解析全本小说
- 解析单章先获取分页信息,需要分页则循环获取所有分页,拼接分页将段落内换行拼接上
- 获取小说段落是否需要重新排序
- 确认是否排序通过页面是否有多余的js文件与base64加密的顺序数组参数
- js逆向后的转写的排序源码将当前页面小说内容转换为正确的顺序
-
处理小说文本,格式化 - processor
-
将小说内容中的图片标签通过图片名替换为字库中的相应文字
-
不存在相应文字时替换为通过md5对比,再不存在则标记该图片未解析以供后续增补
-
将常见推广文本先通过正则匹配,然后再使用直接替换的方式
-
将处理后的文本多余的换行,段落间换行,标点符号间的换行进行处理
小说换行参考可参考软件 天若段落换行 的处理效果
-
-
存储到文件中 - core
- 提供配置文件设置配置输出模式,路径,是否重写,追加等参数 或 命令行设置模式
- 分章或整本合并输出到文件
- 修复了一些说明,不建议将第一版主的小说链接传入,这样会导致不正当的内容被爬取 - 2023/3/13 9:45
- 修复了目录页分卷页数超过2位数引发的正则捕获错误 - 2023/3/4 18:32