手动刷图费时费力,至少我是这么想的。于是就有了这个项目及后续更新。
当前版本的原型基于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搜索,图形界面与并行下载
终于完成了啦