定期从网站抓取单张图片

定期从网站抓取单张图片

我想每天从网站上抓取相同的图像X分钟,最终制作出一段延时视频。

我的问题是:

  • 设置抓取图像的时间表并
  • 保存图像并将时间/日期作为文件名的一部分。

最好使用像 Python 这样的程序吗?

答案1

让我们使用你的头像作为示例(存到/opt/download-avatar

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

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

创建一个每 5 分钟运行一次 cron 任务(存到/etc/cron.d/timelapse-avatar

#!/bin/sh
*/5 * * * * /opt/download-avatar

使脚本可执行

chmod +x /opt/download-avatar
sudo chmod 755 /etc/cron.d/timelapse-avatar

如果你不想使用,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;

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

chmod +x ~/start-timelapse
cd ~
./start-timelapse 7

更新:

谢谢響克

奈杰尔,默认情况下cron运行为用户。与这个问题无关,但从技术上讲,它以“特殊用户”身份运行,非交互运行,没有环境变量(例如)$PATH,没有dbus会话 ID,没有X会话 ID 等。

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

wget "$URL" -O "/home/nigel/pdm-5min/${timestamp}.png"

但这些文件的所有者是, 所以奈杰尔无法移动、删除、编辑它们,除非你授予自己权限(或通过sudo

cron因此,您可以选择以用户身份运行奈杰尔

#!/bin/sh
*/5 * * * * nigel /opt/download-avatar

确保要保存的目录存在,可能需要直接在行前添加wget

mkdir -p /home/nigel/pdm-5min/

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

相关内容