Skip to content

mokeyjay/Yandere-crawler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yande.re图片爬虫

前言

手动刷图费时费力,至少我是这么想的。于是就有了这个项目及后续更新

当前版本的原型基于Win10, Python 3.10.7开发,在Win10, Python 3.11.6完成最后更新。由于并行实现从线程改为协程,最低Python版本需求提高到3.9,但不确定低版本是否具有使用到的特性。

功能

  • 支持从指定的开始页码爬取到结束页码
  • 也支持从第一页爬取到上一次开始爬取的位置
  • 支持设置爬取的图片类型(全部、横图、竖图、正方形)
  • 支持最大或最小图片尺寸宽高比限制
  • 支持限制爬取的图片体积
  • 按照当天的日期创建目录并存放爬取的图片
  • 爬取结束后会在图片目录下生成日志文件
  • 支持tag搜索与排除
  • 支持按提供的id下载pool包含的所有post
  • (失效)GUI

如何使用

配置文件

config.json是完整的配置文件,包含所有设置项:

  • start_page: 起始页码
  • end_page: 结束页码
  • folder_path: 输出文件夹路径,如文件夹不存在将会自动创建。路径必须以斜杠结尾。可接受的分隔符只有/\\\将被认为是转义字符而报错。
  • date_separate: 是否按当天日期创建子文件夹,启用tag搜索时无效
  • tag_search: 是否启用tag搜索,不检查tags是否有效。会按给定的tags串创建子文件夹,但不会包含被丢弃的tags信息。
  • tags: 要搜索的tags,多个tag应以空格分隔
  • discard_tags: 要排除的tags,多个tags应以空格分隔
  • thread_count: 并行下载线程数,非并行分段下载。在低内存设备或低网络带宽设备上不建议设为较高值,网络条件极好的环境也不建议设为较高值。
  • random_delay: 未启用
  • last_stop_idtagSearch_stop_id: 上次运行的最后终止id。运行在按页抓取模式且开始页码不大于1时只会记录最大值,设置了更大的开始页码或运行在tag搜索下会记录最新值,运行在pool下载模式时不会覆写。
  • filter: 图像过滤器:
    • ratio: 按最大压缩的预览图的宽高比例筛选图片,较粗略。如果需要精确筛选,应使用pixel_limit过滤。可选项:
      • all: 不筛选
      • horizontal: 宽>高
      • vertical: 宽<高
      • square: 宽=高
    • pixel_limit: 按像素筛选。可筛选项:最小宽度、最小高度、最小宽高比,最大宽度、最大高度、最大宽高比
    • file_limit: 按体积筛选,单位为byte,大于0时有效
    • pic_type: 按压缩率筛选。可选项:
      • origin: 原图
      • forcepng: 由于部分post的原图即为jpeg格式的压缩图片,开启此项将强制过滤掉所有原图格式不为png的post
      • jpeg: jpeg格式的原尺寸压缩图片
      • sample: 长和宽均不超过1500像素的压缩图片
      • preview: 长和宽均不超过300像素的预览图
    • safe_mode: 过滤explict分级内容。真的会有人用吗
    • rating_checkrating: 更细致的分级过滤器
    • status_check: 按网站提供的状态标记排除部分post

Windows下命令行执行python index.py,Linux下可直接执行。

命令行参数

命令行选项不能修改所有的参数,但通过命令行提供参数是唯一可根据提供的id下载pool的方法。当前可用的选项如下:

  • -s--start: 起始页码
  • -e--end: 结束页码
  • -o--output_folder: 输出文件夹路径,注意事项同前所述。
  • -t--threads: 并行下载线程数,注意事项同前所述。
  • -l--log: 日志等级
  • --pool_id: 按pool下载post,如果指定pool id,则忽略除输出文件夹和下载线程数外的所有其他参数
  • --ratio: 图片比例,可选项:all, horizontal, vertical, square

如果需要按id下载pool,命令行写法如下:python index.py --pool_id=98680

注意事项

  • 需要aiohttpaiofiles两个库
  • 非pool下载模式下,每次运行后config.jsonlast_stop_id参数会被自动修改为爬取到的第一张图片的ID,便于下一次爬取时只爬取新post,无论停止条件为ID或是页码。
  • 通过命令行提供的参数会覆盖配置文件中的值

更新日志

3.0.1

新增:可选图片压缩率

3.0

新增:按pool id下载整个pool,命令行参数

优化:将并行实现从线程转换为协程,优化数据处理逻辑

2.2

优化:改用内置logging库记录日志

2.1

解决tags发生变化后文件重复下载的问题并作出一些改进

2.0

新增:tag搜索,图形界面与并行下载

1.0

终于完成了啦