这是我编写的一个低智能的用来下载 pixiv 漫画的 Bash 脚本,需要输入漫画图片的准确数量以及第一张漫画图片的完整地址,依赖 Axel 与 Perl。
简介
目前已经有很多成熟的 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}"
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 read -p "请输入第一张图片的完整地址:" url
id=$(echo $url | cut -c56-63) prefix=$(echo $url | cut -c56-65) suffix=$(echo $url | cut -f4 -d".")
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
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 下载,国内使用脚本下载基本上卡死不动,或者你很熟悉如何在命令行内使用代理,也可以自行修改 此处。
展示
为了和谐直接放录屏。