dmzj备份——维护你的本地dmzj书架
考虑到叔叔的大手以及无形大手的影响,有必要保全dmzj上的订阅内容,因此试着写了这个项目
本项目可以下载并同步更新用户在dmzj上的订阅内容
由于dmzj页面改用动态js生成,原本按页面元素爬取的方式已不适用,现改为fetch api数据
不出意外的话应该是最后一次更新了,dmzj也快走到头了,想要本地化自己订阅的用户请尽快
为了适配作者的另一个仓库Comic2Epub,所有数据改用.toml格式存储,并在下载时生成一个Tachiyomi形式的元数据.json文件
注意:旧的元数据与此版本已不兼容
需要scrapy, js2py库
pip3 install scrapy, js2py对高级功能不感兴趣的用户只需阅读下面的一分钟教程即可轻松上手
-
修改
settings.py中的MY_USERNAME,MY_PASSWORD为自己的用户名和密码 -
在命令行中转到项目目录,执行
python run.py
首次运行会爬取全部订阅内容,如果订阅内容较多,首次运行的时间会比较长,请耐心等待
-
后续下载更新内容时,为缩短运行时间,避免重复请求和下载,可以将
MY_ROUGH_UPDATE设置为True,同样地执行python run.py
修改settings.py中的MY_USERNAME, MY_PASSWORD为自己的用户名和密码
在命令行中转到项目目录,执行
scrapy crawl Dmzj也可运行项目文件夹中的run.py来快速启动(推荐)
python run.pyscrapy库支持暂停和恢复程序,通过JOBDIR参数传递,例如,在启动时执行
scrapy crawl Dmzj -s JOBDIR=jobs/test1然后可以安全地停止程序(如ctrl+C或远程发送信号),下一次启动时只需执行相同命令即可恢复请求队列
scrapy crawl Dmzj -s JOBDIR=jobs/test1详细用法参见scrapy:jobs
middlewares.py中实现了简单的proxy中间件,通过修改 MY_PROXY_ENABLED和MY_PROXY设置即可通过单一代理进行访问,后续可能会添加代理池的实现。建议设置代理使用,以免影响对dmzj的正常访问
第一次下载完成后,通过将MY_UPDATE_MODE设置为True,爬虫将以更新模式运行,通过上一次保存的info.toml文件进行更新章节的匹配,并忽略上次已经抓取的章节,有效提高第二次及之后运行的速度
更进一步,开启MY_ROUGH_UPDATE粗略更新模式后,爬虫将只比较订阅页面中的最新章节信息与本地是否一致,大大提高运行速度
注意: 更新模式下将忽略已下载内容的完整性,若上一次下载未完成(例如通过ctrl+C中途退出)就开启更新模式将造成下载内容不完整。这是由于爬虫在成功抓取目录页后直接返回含有info.toml信息的ComicItem,并未检查后续请求成功与否
要避免这种情况,请完整运行第一次后开启此设置,并开启 MY_RETRY重试上一次运行中意外失败的请求(如403或429等)。重试后可能仍出现404错误,但部分404是服务器资源缺失造成的,如果多次运行后重试列表仍未清空,可以手动删除error.toml文件
启用MY_COVER_UPDATE设置将重新请求各漫画的封面并覆盖本地封面,如果需要更新封面图,请开启此选项并关闭 MY_ROUGH_UPDATE选项
在settings.py文件中修改设置,常用的设置如下
MY_USERNAME,MY_PASSWORD: 用户名和密码FILES_STORE: 图片下载位置,默认为'./download'CONCURRENT_REQUESTS: 并行下载线程数,默认为4,请勿设置过大DOWNLOAD_DELAY: 两次请求间的延迟,为0时无延迟,请勿设置过小
一些进阶设置如下
LOG_LEVEL: 日志等级,基于logging库RETRY_ENABLED: 请求失败后是否重试,默认为TrueRETRY_TIMES: 请求失败后的重试次数DOWNLOAD_TIMEOUT: 请求超时时间TELNETCONSOLE_PORT,TELNETCONSOLE_USERNAME,TELNETCONSOLE_PASSWORD: telnet控制台参数,详见scrapy:telnetMY_ROUGH_UPDATE: 以粗略检查模式运行,将覆盖更新模式和更新封面的设置,建议日常更新使用时开启。开启后将忽略MY_UPDATE_MODE和MY_COVER_UPDATEMY_UPDATE_MODE: 以更新模式运行,默认为False,建议第一次运行结束后开启MY_COVER_UPDATE: 启用后会强制更新封面MY_RETRY: 启用后会在运行开始时重试上一次失败的请求,不启用时失败请求也会记录但不会重试,直到启用后的下一次运行开始时重试所有记录的请求
其余设置请谨慎修改,详见settings.py以及scrapy:settings
本项目作为作者个人练习项目仅供教学使用,下载作用仅为本项目的副作用。为避免对目标站点造成困扰,作者已将并发数和下载延迟设置为作者认为不会对目标站点造成影响的程度。作者不对项目使用者使用项目所造成的任何后果承担任何责任,同时作者不对任何下载内容承担任何责任。
MIT