如何使用 wget 爬取网站直到保存 300 个 html 页面

如何使用 wget 爬取网站直到保存 300 个 html 页面

我想在 Ubuntu 中使用 wget 递归爬取一个网站,并在下载 300 个页面后停止。我只保存页面的 html 文件。目前,这是我正在使用的命令:

wget -r --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL --follow-tags=a

我希望代码能够以某种方式计算 LOCAL-DIR 中的 html 文件数,如果计数器显示 300,则停止抓取。有什么办法吗?

答案1

您可以尝试这样的事情:

  1. 将命令置于后台wget并记录其 PID ( $!)

  2. inotifywatch在接收目录上设置一个来计数文件

  3. 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)

相关内容