手动刷图费时费力,至少我是这么想的。于是就有了这个项目及后续更新。
当前版本的原型基于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_id和tagSearch_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的postjpeg: jpeg格式的原尺寸压缩图片sample: 长和宽均不超过1500像素的压缩图片preview: 长和宽均不超过300像素的预览图
safe_mode: 过滤explict分级内容。真的会有人用吗rating_check和rating: 更细致的分级过滤器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
- 需要aiohttp和aiofiles两个库
- 非pool下载模式下,每次运行后
config.json中last_stop_id参数会被自动修改为爬取到的第一张图片的ID,便于下一次爬取时只爬取新post,无论停止条件为ID或是页码。 - 通过命令行提供的参数会覆盖配置文件中的值
新增:可选图片压缩率
新增:按pool id下载整个pool,命令行参数
优化:将并行实现从线程转换为协程,优化数据处理逻辑
优化:改用内置logging库记录日志
解决tags发生变化后文件重复下载的问题并作出一些改进
新增:tag搜索,图形界面与并行下载
终于完成了啦