写了个简易的多个网页连续截图脚本

目前适用于 ngacn 论坛帖子,效果图如下:

启动脚本后,会依次询问你 nga 的帖子 id,总页码数量和帖子名称。脚本会自动检查是否之前已经抓取过该帖子并在上次抓取的最后一页开始继续往下抓取。

每个帖子的抓取结果会放在独立的目录,并以”帖子id”-“自定义名称”的形式储存

注意事项:

  1. 脚本会优先检查是否有 $tid-xxx 形式的目录,只要 $tid 一致,脚本就认为本次会在旧的内容基础上往后抓取截图,xxx 的名称可以是任意的,不检查。假如已经存在一个 『12345-上山打老虎』 的目录,而你第二次输入的是 『12345-钻石王老五』,则实际更新的依然是『12345-上山打老虎』 目录。
  2. 目录名称中间的减号必须保留,否则脚本会忽略已存在的目录,按新目录工作执行。目录内的 1.update.sh 文件也必须保留。
  3. 我的运行环境是 Win10 64 位 1703 版本,不保证在其它机器上能正常运行。在 Win10 下脚本文件可以直接双击打开,在Win7 下可能需要右键点击并选择用 Git Bash 打开。
  4. 需要预先安装该脚本所需要的环境才能正常运行,包括 node、bash 等。

安装与准备工作:

  1. 下载并安装 Node for win 使 Windows 获得本截图脚本所需的 node 语言支持: 下载网址: https://nodejs.org/en/download/ ,选择下载 LTS 版本下对应的 32位 或 64 位 Windows Installer。安装一路 next 就行。
  2. 下载并安装 Git for win 使 Windows 也能使用 Bash 脚本。下载网址:https://git-for-windows.github.io/ ,也是一路 next 默认安装就行。
  3. 从开始菜单找到 Git Bash,,点击运行,在黑色窗口内依次输入以下内容:
1
2
3
npm config set registry https://registry.npm.taobao.org
npm i -g npm@latest
npm i -g pageres-cli

效果:

  1. 新建一个目录,起个名,比如叫『nga截图收藏夹』之类的。
  2. 在目录下新建一个文本文件,复制粘贴以下代码:
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
50
51
52
53
54
55
#!/bin/bash

#User input

tid=""
totalpage=""
title=""
while [[ ! $tid =~ ^[0-9]+$ ]]; do
echo -e "输入 NGA 帖子 id:"
read -r tid
done
while [[ ! $totalpage =~ ^[0-9]+$ ]]; do
echo -e "指定该帖子的总页数:"
read -r totalpage
done
echo -e "起个标题备注(可以自定义):"
read -r title

#Check if $tid follder is exist

for _dir in "${tid}-"*; do
[ -d "${_dir}" ] && targetdir="${_dir}" && break
done
if [ -z "$targetdir" ]; then
echo "建立一个新目录"
foldername=$tid"-"$title
mkdir "$foldername"
cd "$foldername"
touch 1.update.sh
echo -e "#!/bin/bash" >>1.update.sh
echo -e "startpage=\"1\"" >>1.update.sh
echo -e "totalpage=\""$totalpage"\"" >>1.update.sh
echo -e "tid=\""$tid"\"" >>1.update.sh
echo -e "rm \"page\"\$startpage\".png\"" >>1.update.sh
echo -e "for i in \`seq \$startpage \$totalpage\`" >>1.update.sh
echo -e "do" >>1.update.sh
echo -e " page=\"http://bbs.ngacn.cc/read.php?tid=\"\$tid\"\&page=\"\$i" >>1.update.sh
echo -e " fn=\"page\"\$i" >>1.update.sh
echo -e " echo \$page" >>1.update.sh
echo -e " pageres \$page --filename=\$fn" >>1.update.sh
echo -e "done" >>1.update.sh
echo -e "sed s/^startpage=\\\".*\\\"\$/startpage=\\\"\$totalpage\\\"/g 1.update.sh >u.tmp" >>1.update.sh
echo -e "mv -f u.tmp 1.update.sh" >>1.update.sh
else
foldername=$targetdir
echo "发现旧的工作目录,在此目录上更新:"
echo $foldername
cd "$foldername"
sed s/^totalpage=\".*\"$/totalpage=\"$totalpage\"/g 1.update.sh >u.tmp
mv -f u.tmp 1.update.sh
fi

sh ./1.update.sh

echo "Work Done"

随便起个名,并把后缀名改为 .sh。如何修改后缀名请自行百度。

使用:

  1. 双击,依次输入帖子 id,最后一页页码和标题就可以用了。

尾注:

  1. 如果你懂得简单的编程,可以尝试阅读脚本,并自行修改以抓取其它网站的贴子。这个脚本的原理就是利用 nga 帖子很有规律的地址,通过指定帖子 tid、页码 pageid 拼接出需要抓取的指定页面网址,然后反复调用 pageres 去抓取。实际进行抓取的是一个叫 pageres 的 npm 小程序。
  2. 如果你懂得简单的 JS,你可以自行指定 pageres 的抓取参数,甚至包括登录的 cookie 等,以实现『个性化抓取』。
  3. 如果你会完整的 node 开发,希望这个脚本也能为你提供一些参考。