wget spider两次返回所有URL - bug在哪里?

时间:2013-04-13 01:15:26

标签: linux bash scripting wget

我一直在寻找一个脚本来为站点地图创建一个URL列表,并找到了这个:

wget --spider --force-html -r -l1 http://sld.tld 2>&1 \
  | grep '^--' | awk '{ print $3 }' \
  | grep -v '\.\(css\|js\|png\|gif\|jpg\|ico\|txt\)$' \
  > urllist.txt

结果是:

http://sld.tld/
http://sld.tld/
http://sld.tld/home.html
http://sld.tld/home.html
http://sld.tld/news.html
http://sld.tld/news.html
...

每个网址条目都会保存两次。应如何更改脚本以解决此问题?

1 个答案:

答案 0 :(得分:0)

如果你在使用--spider标志时查看wget的输出,它看起来像是:

Spider mode enabled. Check if remote file exists.
--2013-04-12 22:01:03--  http://www.google.com/intl/en/about/products/
Connecting to www.google.com|173.194.75.103|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Remote file exists and could contain links to other resources -- retrieving.

--2013-04-12 22:01:03--  http://www.google.com/intl/en/about/products/
Reusing existing connection to www.google.com:80.
HTTP request sent, awaiting response... 200 OK

它检查链接是否存在(因此打印出--),然后必须下载它以寻找其他链接(因此第二个--)。这就是使用--spider时显示(至少两次)的原因。

将其与--spider进行比较:

Location: http://www.google.com/intl/en/about/products/ [following]
--2013-04-12 22:00:49--  http://www.google.com/intl/en/about/products/
Reusing existing connection to www.google.com:80.

所以你只得到一行以--开头。

您可以删除--spider标记,但仍然可以获得重复项。如果您确实不想要任何重复项,请在命令中添加| sort | uniq

wget --spider --force-html -r -l1 http://sld.tld 2>&1 \
  | grep '^--' | awk '{ print $3 }' \
  | grep -v '\.\(css\|js\|png\|gif\|jpg\|ico\|txt\)$' \
  | sort | uniq > urllist.txt