定期从网站抓取单个图像

Nig*_*gel 2 linux shell-script

我想每x分钟抓取相同的图像(来自网站)以最终制作延时视频。

我的问题是:

  • 设置计划以抓取图像和
  • 使用时间/日期作为文件名的一部分保存图像。

最好使用 Python 之类的东西吗?

jus*_*ing 7

让我们以您的头像为例(保存到/opt/download-avatar

#!/bin/bash
URL="https://www.gravatar.com/avatar/554f043fa658cba9bbc2ee4c6d4e052d?d=identicon"
timestamp=$(date +%F_%T);
wget "$URL" -O "${timestamp}.png"
Run Code Online (Sandbox Code Playgroud)

注意:最好将文件名保存为纪元的秒数 timestamp=$(date +%s)

创建一个cron 作业,每 5 分钟运行一次(保存到/etc/cron.d/timelapse-avatar

#!/bin/sh
*/5 * * * * /opt/download-avatar
Run Code Online (Sandbox Code Playgroud)

使脚本可执行

chmod +x /opt/download-avatar
sudo chmod 755 /etc/cron.d/timelapse-avatar
Run Code Online (Sandbox Code Playgroud)

如果您不想使用,cron那么只需(保存到~/start-timelapse

#!/bin/bash
input="$1"
URL="https://www.gravatar.com/avatar/554f043fa658cba9bbc2ee4c6d4e052d?d=identicon"

if [ -z "$input" ]; then
  echo "USAGE: $0 [interval in minutes]" 
  exit 1
else
  interval=$((60*input));
fi

while [ 0 = 0 ]; do
  timestamp=$(date +%s)
  wget "$URL" -O "${timestamp}.png"
  echo "Sleeping for $input minutes"
  sleep "$interval"
done;
Run Code Online (Sandbox Code Playgroud)

使可执行文件并以 7 分钟间隔运行

chmod +x ~/start-timelapse
cd ~
./start-timelapse 7
Run Code Online (Sandbox Code Playgroud)

更新:

谢谢slhck

Nigel,默认情况下cronroot用户身份运行。与此问题无关,但从技术上讲,它作为“特殊用户”运行,非交互式,没有环境变量,例如$PATH,没有dbus会话 id,没有X会话 id 等。

~/是用户主目录的简写(另请参阅环境变量$HOME)。默认情况下,对于用户,这将是例如,/home/nigel但对于root,这/root可能是cron已将他们保存到/root/pdm-5min. 你可以使用:

wget "$URL" -O "/home/nigel/pdm-5min/${timestamp}.png"
Run Code Online (Sandbox Code Playgroud)

但是,这些文件将由root拥有,因此nigel将无法移动、删除、编辑它们,除非您以root身份(或通过sudo)授予自己权限

因此,您可以选择以cron您的用户nigel运行。

#!/bin/sh
*/5 * * * * nigel /opt/download-avatar
Run Code Online (Sandbox Code Playgroud)

确保您要保存的目录存在,可能希望直接在该wget行之前添加:

mkdir -p /home/nigel/pdm-5min/
Run Code Online (Sandbox Code Playgroud)

最后,小心你的"(引号)。使用它们以便变量保留空格(空格、制表符等),但要确保每个单引号或双引号都有一个匹配的,这不是可选的。