Pixiv 漫画下载脚本

这是我编写的一个低智能的用来下载 pixiv 漫画的 Bash 脚本,需要输入漫画图片的准确数量以及第一张漫画图片的完整地址,依赖 AxelPerl

简介

目前已经有很多成熟的 pixiv 爬取工具,利用 Pyhton、JavaScript 等等,但是我拒绝。Bash 按顺序执行的特点太适合我这样的非编程人士了。

脚本

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
#!/usr/bin/env bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH

# 输出样式
Info_font='\e[32;49;1m'
Warning_font='\033[31m'
Font_color='\033[39;49;0m'
Info="${Info_font}[信息]${Font_color}"
Warning="${Warning_font}[警告]${Font_color}"

# 检测 axel、perl
type axel >/dev/null 2>&1 || { echo -e "${Warning} 请检查 axel!"; exit 1; }
type perl >/dev/null 2>&1 || { echo -e "${Warning} 请检查 perl!"; exit 1; }

# 读取输入
#read -p "请输入图片数量以及第一张图片的完整地址:" all url
read -p "请输入图片数量:" all
read -p "请输入第一张图片的完整地址:" url

# 处理 $url,$id 和 $prefix 的获取比较生硬
id=$(echo $url | cut -c56-63)
prefix=$(echo $url | cut -c56-65)
suffix=$(echo $url | cut -f4 -d".")

# 在主目录下创建目录,名称是漫画 id
cd && mkdir "$id" && cd "$id" || exit 1
# 写入下载地址
list=url.txt
echo $url | sed 's/master/original/1;s/_master1200//' > $list
for i in $(cat $list) ; do seq 1 $all | xargs -i -- echo "$i" > $list; done
perl -pi -e 's/(p)(0)(.)/sprintf("%s%d%s",$1,$kv{"$1$2$3"}++,$3)/ge' $list

# 使用 axel 依次下载文件
echo -e "${Info} 开始下载文件."
cat $list | xargs -l1 axel -ackv -n 13 -H "Referer: https://www.pixiv.net/"

# 任务结束
echo -e "${Info} 文件下载完毕."
echo -e "${Info} 重命名并检查文件数量."
ls *"$suffix" | awk -F "$prefix" '{print "mv "$0" "$1$2""}' | $SHELL
result=$(ls *"$suffix" | wc -l)
if [ "$result" = "$all" ]; then
echo -e "${Info} 任务完成."
else
echo -e "${Warning} 请 进入 "$id" 目录查看情况."
fi

使用

脚本已发布至我的 Gist,你可以自行测试使用或者直接使用以下命令安装到你的系统。

1
2
3
4
wget https://gist.githubusercontent.com/1v9/3be9dd61a30d08b6f47199490dd03afc/raw/2b3080283463db940ddef2f38c25c0769fa89167/pixiv.sh
mv pixiv.sh /usr/local/bin/pixiv
chmod a+x /usr/local/bin/pixiv
which pixiv

打开你的本地或远程终端运行 pixiv 命令,我建议使用国外的 vps 下载,国内使用脚本下载基本上卡死不动,或者你很熟悉如何在命令行内使用代理,也可以自行修改 此处

展示

为了和谐直接放录屏。