首页 > 解决方案 > wget spider 一个网站收集所有链接

问题描述

我正在尝试将此网站蜘蛛深度 = 2 并收集所有链接(网址)。一个简单的任务,但似乎是不可能的,我一定错过了什么?我没有得到任何网址,只是一个空的文本文件。这是我正在使用的最新命令(我知道很乱):

wget --spider --force-html --span-hosts --user-agent="Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" -np --limit-rate =20k -e robots=off --wait=3 --random-wait -r -l2 https://en.wikibooks.org/wiki/C%2B%2B_Programming 2>&1 | grep '^--' | awk '{ 打印 $3 }' | grep -v '.(css\|js\|png\|gif\|jpg)$' | 排序 | uniq > urls.txt

有任何想法吗?

标签: wget

解决方案


我建议你分两步完成,更好的可读性和更少的混乱。

  1. 进行爬虫并在日志文件中获取输出。
  2. 解析日志文件以获取您正在查找的 URL。

对于 #1 -

wget --spider --force-html --span-hosts --user-agent="Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" -np --limit-rate =20k -e robots=off --wait=3 --random-wait -r -l2 https://en.wikibooks.org/wiki/C%2B%2B_Programming -o wget.log &

一旦#1完成,你可以去#2。

对于 #2 -

grep http wget.log | grep -v "[以下]" | awk '{打印 $3}' | grep -vE ".css|.js|.png|.gif|.jpg" | 排序 -u > urls.txt

这将为您提供您正在寻找的东西。

请注意,#1 将下载它找到的所有内容,并且由于您要深入 2 个级别,这可能是大量数据。如果您不想下载所有内容(即,如果您打算使用 urls.txt 下载内容),则可以在 wget 中使用“--delete-after”选项


推荐阅读