我想在 Ubuntu 中使用 wget 递归爬取一个网站,并在下载 300 个页面后停止。我只保存页面的 html 文件。目前,这是我正在使用的命令:
wget -r --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL --follow-tags=a
我希望代码能够以某种方式计算 LOCAL-DIR 中的 html 文件数,如果计数器显示 300,则停止抓取。有什么办法吗?
答案1
您可以尝试这样的事情:
将命令置于后台
wget
并记录其 PID ($!
)inotifywatch
在接收目录上设置一个来计数文件wget
当计数超过阈值时终止进程
为了说明起见,使用 shell 函数来模拟递归wget
:
#!/bin/bash
local_dir=tmp
wgetcmd() {
local i=0
while :
do
# simulate page download
echo "Downloading... $((++i))"
touch "$local_dir/file${i}.html"
sleep 2
done
}
wgetcmd & pid=$!
j=1
while kill -s 0 $pid && read path action file
do
if (( ++j >= 30 )); then
echo "Reached page limit"
kill $pid
break;
fi
done < <(inotifywait -m "$local_dir" -e close_write)