这段时间半次元前端做了很大的改动,先后更新了两版,之前的小版本v1.1
也不能用了,索性更新了banciyuan-downloader
v2.0版本,做了很大的改变,代码全部封装到Downloader
类里,下面是更新内容
banciyuan-downloader v2.0
- 更新时间:
2018-06-18
更新原因
- 半次元前端改版,需要重写脚本以适应HTML解析
- 半次元登录认证改为通过cookie表单传递认证,需重写登录方法
- 脚本太乱,需进行封装
更新内容
模块化
将方法封装到类Downloader
里,优化接口方法,可提供外部调用
实现功能
-
根据
coser_id
批量下载某个coser发布的作品的所有图片 - 图片保存在以 coser名 命名的文件夹内
- 图片按 coser发布的作品 分文件夹保存,文件夹命名以 作品标签 拼接而成
- 若有相同标题的作品,则命名文件夹时会加上 顺序编号后缀 防止文件名冲突
-
图片命名格式为
%num%.jpg
/%num%.png
,其中%num%
为从1
开始的 编号 - 支持智能下载 本地没有的作品,本地已有的作品 不会 重复下载
- 支持 断点续传 (从断连作品的下一个作品开始下载,若断连作品没下载完,则会丢失一部分断连作品的图片,其余均不影响)
- 支持超时自动重试
- 支持下载指定作品
- 根据频繁I/O进行 多线程优化
- 不支持无半次元账号的下载,因为有 只有粉丝可见 的限制,最好注册一个半次元账号
- 只有粉丝可见的作品需关注该coser后方可下载
-
暂时不支持只下载
COS
类的作品,因为半次元改版后没有对COS
和绘画
之类的做分类,都在同一url
下
依赖的库
我的测试环境:
- python 3.6.4
- beautifulsoup 4.5.3
- requests 2.13.0
- lxml 3.7.2
如何使用
-
直接运行
run.py
先执行:
1
python run.py
后续步骤参考v1.0的Usage
-
自定义实现
因为进行了 模块化,所以可以自行实例化一个
Downloader
对象来调用方法实现功能,下面给出简单例子:分部执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50from bcy_downloader import Downloader
# 实例化Downloader对象
# 用户名: test
# 密码: 123
# coser_id: 770554
# 下载目录: E:/banciyuan
dl = Downloader(account='test', password='123', coser_id='770554', bcy_home_dir='E:/banciyuan')
# 获取作品url列表
dl.get_post_url_list()
# 或者自定义下载作品列表
dl.post_url_list = ["https://bcy.net/item/detail/6558754255610577155", "https://bcy.net/item/detail/6554677621064466692"]
# 查看作品url列表
print(dl.post_url_list)
# 查看本地已下载作品url列表
print(dl.local_post_url_list)
# 获取每个作品下所有图片url,得到download_data
dl.get_pics_url_list()
# 查看download_data
# 格式如下
# {
# '$(post_url)':
# {
# 'post_name': $(post_name),
# 'pics_url_list': $(pics_url_list)
# }
# }
# 例子:
# {
# "https://bcy.net/item/detail/6558754255610577155":
# {
# 'post_name': "碧蓝航线-COS-舰娘-场照-返图-cp22-三三笠",
# 'pics_url_list': [
# 'https://img5.bcyimg.com/user/770554/item/c0je3/63y6vuq8hhgfmge7nrqcaqkpspyfszj5.jpg?1',
# 'https://img9.bcyimg.com/user/770554/item/c0je3/esdrtvchzzkfzm74ezd8idx04ennjjfr.jpg?2',
# ......
# 'https://img9.bcyimg.com/user/770554/item/c0je3/zfiyptpdcpasyz0itzh7ndtmpiysw8uy.jpg?9'
# ]
# }
# }
print(dl.download_data)
# 根据download_data获取图片
dl.get_pics()一键执行
1
2
3
4
5
6
7
8
9
10
11from bcy_downloader import Downloader
# 实例化Downloader对象
# 用户名: test
# 密码: 123
# coser_id: 770554
# 下载目录: E:/banciyuan
dl = Downloader(account='test', password='123', coser_id='770554', bcy_home_dir='E:/banciyuan')
# 自动下载
dl.run()
注意
v2.0
版本下载时会在 每个作品对应的文件夹
里建一个url.local
文件,里面写入的是该作品对应的url
。该文件主要用于
判断本地是否已经下载过该url
对应的作品,以实现智能无重复下载,请不要随意删除