Code Monkey home page Code Monkey logo

pica_crawler's Introduction

项目简介

一个哔咔漫画的下载程序,基于python实现,欢迎各位绅士来捉虫

  • 目前已实现按 排行榜/收藏夹/指定关键词 进行下载的功能
  • 本项目是基于AnkiKong大佬开源的项目编写的,仅供技术研究使用,请勿用于其他用途,有问题可以提issue
  • 可以fork这个项目,根据api文档自行开发功能
  • 麻烦给个star支持一下:heart:

本地运行

漫画直接下载到本地磁盘,免去了邮箱推送这个步骤
需要手动运行,不支持定时运行,适合下载大量漫画

  1. clone项目到本地
  2. 把pica_crawler_actions.yml的env中所有环境变量配置到本地
  3. 开启科学上网
  4. 运行main.py,下载好的漫画在/comics这个文件夹内
  5. git上提交downloaded.txt到远程仓库,避免重复下载

docker 运行

新增了环境变量 PACKAGE_TYPE, 参数为 True 和 False 设置为True时, 会根据漫画名称压缩成zip包, 以供 Komga 等漫画库 使用, 也会删除comics文件夹 ( 避免docker容器占用过多硬盘 )

# main.py
if os.environ.get("PACKAGE_TYPE", "False") == "True":
    # 打包成zip文件, 并删除旧数据
    zip_subfolders('./comics', './output')
    shutil.rmtree('./comics')

新增了环境变量 REQUEST_PROXY, 这样下载图片时允许使用代理了

# client.py
proxy = os.environ.get("REQUEST_PROXY")
if proxy:
    proxies = {'http': proxy, 'https': proxy}
else:
    proxies = None
response = self.__s.request(method=method, url=url, verify=False, proxies=proxies, **kwargs)
return response

新增了环境变量 BARK_URL, bark消息通知 允许打包完成 or 下载完成发送自定义消息, 例: https://api.day.app/{your_keys}/picacg下载成功

# main.py
if os.environ.get("BARK_URL"):
    # 发送消息通知
    request.get(os.environ.get("BARK_URL"))

可以挂载这两个目录 工作目录为 /app/comics 存放下载漫画图片的文件夹, /app/output 存放输出zip的文件夹

  1. docker-compose.yml 参考 docker-compose.yml 文件

  2. docker cli 最小运行

PICA_SECRET_KEY可以不用更改, 如果需要更改时, 注意是单引号内容

docker部署建议将PACKAGE_TYPE打开, 同时挂载/app/output目录

docker run --name picacg-download-container -d \
    -e PICA_ACCOUNT="账户名称" \
    -e PICA_PASSWORD="账户密码" \
    -e REQUEST_PROXY="http代理(可选)" \
    -e BARK_URL="bark消息通知(可选)" \
    -e PACKAGE_TYPE="True" \
    -e PICA_SECRET_KEY='~d}$Q7$eIni=V)9\RK/P.RM4;9[7|@/CA}b~OW!3?EV`:<>M7pddUBL5n|0/*Cn' \
    -v ./comics:/app/comics \
    -v ./output:/app/output \
    yuanzhangzcc/picacg-download:latest

git actions运行

漫画将会以压缩包附件的形式推送到邮箱上,受限于邮件的附件大小,漫画会被打包为若干个压缩包,一次性可能会收到若干个邮件
不同邮箱支持的最大邮件内容不同,qq/新浪是50mb,outlook是20mb,建议用大一点的,避免拆分的压缩包过多下载起来麻烦
支持自动定时运行,适合每天推送少量的漫画

  • fork本仓库
  • 新增Actions secrets
secret 说明
PICA_SECRET_KEY AnkiKong提供的secret_key
PICA_ACCOUNT 哔咔登录的账号
PICA_PASSWORD 哔咔登录的密码
EMAIL_ACCOUNT 接收漫画的邮箱
BARK_URL 允许打包完成 or 下载完成发送自定义消息 例: https://api.day.app/{your_keys}/picacg下载成功
EMAIL_AUTH_CODE 邮箱的授权码,参考qq邮箱的这篇文档
GIT_TOKEN 参考这篇文章,只勾选repo的权限,Expiration设置为No Expiration

图片名称

  • 打开fork项目的workFlow开关

图片名称

  • 点击pica_crawler_actions.yml,编辑git actions. 写了注释的配置项,都可以根据需求改动

图片名称

  • 手动触发一次,测试下能不能跑通

图片名称

成功运行的截图:
图片名称

  • 成功运行后,可以在这里下载到漫画的压缩包. 如果配置了邮箱推送功能,还可以查收邮件里的附件

图片名称

  • 我自己也fork了一份,每天都在自动运行的,可以通过这个项目的actions运行记录判断这个项目是否还能work

解压注意事项

  1. 将所有邮件的压缩包下载至统一目录. (存在单个压缩包里可能只有半本漫画的情况),然后全选压缩包,右键解压到当前文件夹.
  2. 如果你在上个步骤选择右键解压文件,默认是以压缩包名创建一个新的文件夹,会出现漫画拆散在不同文件夹的情况
  3. 压缩包默认zip格式,无解压密码.遇到解不开的情况可能是下载时压缩包损坏了,尝试下重新下载

下载的范围

排行榜

哔咔24小时排行榜内的所有漫画

收藏夹

收藏夹内的所有漫画,下载完成后会自动取消收藏

关键词订阅

SUBSCRIBE_KEYWORD里配置若干个关键词,下载范围等同于在哔咔app里用关键词搜索到的所有漫画
这个功能可能会下载过量的漫画,导致邮箱无法推送,可以调整SUBSCRIBE_DAYS缩小下载范围,或者是本地运行main.py

部分漫画不会被下载的原因

排行榜/订阅的漫画会受到以下过滤逻辑的影响,收藏夹则不会(如果下载到本地后文件丢失了,可以通过放入收藏夹把它全量下载下来)

过滤重复下载

downloaded.txt文件记录了已下载的漫画id, run_time_history.txt文件记录了每次运行的时间.
排行榜上已下载过的漫画会触发增量下载,跳过曾下载过的章节,其余所有情况都是全量下载所有章节.
每次运行代码后,都会通过git actions的指令提交代码,保存本次的运行结果.GIT_TOKEN配置错误将导致提交代码失败,这会导致漫画被重复下载和推送

过滤分区

支持通过分区自定义下载逻辑.

git actions配置文件的CATEGORIES配置项可以配置0~n个哔咔的分区, 配置为空则代表不过滤

CATEGORIES_RULE可以配置为 INCLUDE: 包含任意一个分区就下载 EXCLUDE: 包含任意一个分区就不下载

部分漫画只打上了'短篇'/'长篇'这样单个分区,在配置为INCLUDE时,建议把比较常见的分区给填上,不然容易匹配不到漫画

订阅的时间范围

对于订阅的漫画,如果 当天 - 订阅漫画的上传日 > SUBSCRIBE_DAYS,这本漫画将不再被下载

结尾

清心寡欲在平时,坚守临期凛四知,鸩酒岂堪求止渴,光明正大好男儿:thumbsup:

CHANGELOG

日期 说明
2023/10/02 1.补充了上次更新没写进去的运行时间的保存逻辑:laughing: 2.改用total_seconds()判断时间差,seconds算出来的结果有误 3.修复了分卷压缩函数KeyError的问题--创建的压缩包个数 = 文件总大小/压缩包的最大大小,但分卷压缩时每个包都不会被填满的,导致实际需要更多的包
2023/09/12 修复了漫画曾被下载一次后, 新增章节无法被下载的bug. 现在记录了上次运行的时间, 与漫画章节的上传时间进行比对, 有新章节时则触发增量下载
2023/03/28 修复了调用分页获取章节接口时,只获取了第一页的bug,这会导致总章节数>40的漫画下载不全
2023/02/03 参考了jiayaoO3O/18-comic-finder,现在可以在git actions上下载到完整的压缩包
2023/02/01 1.区分了git actions和本地运行两种运行方式 2.新增按关键词订阅功能 3.调整了邮箱的配置项,支持指定加密方式和端口 4.引入狗屁不通文章生成邮件正文的随机字符串
2023/01/06 基于git actions重构了代码,并采用了邮件的形式推送漫画
2022/12/08 启动项目时自动打卡
2022/11/27 实现按排行榜以及收藏夹进行下载的功能

pica_crawler's People

Contributors

actions-user avatar ankikong avatar lx1169732264 avatar quietblade avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

pica_crawler's Issues

常见问题汇总

代码跑不起来先看这里, 有新的问题也可以在下方提问

PICA_SECRET_KEY配置错误

复制红框内容作为PICA_SECRET_KEY. r是python声明字符串的关键词,不需要复制的
QQ截图20230103165721

SMTPNotSupportedError

部分邮箱需要开启tls协议, 1.2版本没做适配, 会导致发邮件失败. 这个问题我会抽空解决
qq/新浪邮箱不会有这个问题的, 遇到这个问题可以先通过换个邮箱来解决
@F8Y@8RD` QLM2{YZJOFPDY

commit & push阶段报错

image
GIT_TOKEN配置错了, 会导致已下载的漫画不会被记录, 然后推送给你重复的漫画

smtplib.SMTPDataError: (550

Y(CE}}3KO$X)IC%%T) 9O@1

这类一般是邮件服务器返回的错误,可以看下对应的帮助文档,比如qq邮箱
550一般是短时间内发邮件次数过多了, 这会导致你的邮箱暂时无法接受邮件(我试了下次日解封的)
我现在加了发邮件的间隔时间, 以及正文的随机字符串, 尽量去避免被邮件服务器给拦截

也可以看下这篇博客, 我在设置邮件地址白名单后暂时没有遇到过这个问题了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.