使用 wget 下载给定域下可访问的所有 URL 而不保存实际页面?

使用 wget 下载给定域下可访问的所有 URL 而不保存实际页面?

您好,尝试确定给定域下的所有有效 URL,而无需在本地镜像站点。

人们通常希望下载所有页面,但我只想获取给定域 (例如 www.example.com) 下的直接 URL 列表,例如 www.example.com/page1、www.example.com/page2 等。

有没有办法使用 wget 来做到这一点?或者有没有更好的工具?

答案1

以下是一个粗略的脚本:

curl -s whaturl |
  grep -o "<a href=[^>]*>" |
  sed -r 's/<a href="([^"]*)".*>/\1/' |
  sort -u

挑选grep出所有hrefs。sed从 中挑选出 url 部分hrefsort过滤掉重复的链接。

它还可以wget -O -代替curl -s

示例输出:

$ curl -s http://stackexchange.com/users/148837/lesmana?tab=accounts | grep -o "<a href=[^>]*>" | sed -r 's/<a href="([^"]*)".*>/\1/' | sort -u
/
/about
/about/contact
/blogs
/leagues
/legal
/legal/privacy-policy
/newsletters
/questions
/sites
/users/148837/lesmana
/users/148837/lesmana?tab=activity
/users/148837/lesmana?tab=favorites
/users/148837/lesmana?tab=reputation
/users/148837/lesmana?tab=subscriptions
/users/148837/lesmana?tab=top
/users/login?returnurl=%2fusers%2f148837%2flesmana%3ftab%3daccounts
http://area51.stackexchange.com/users/16563/lesmana
http://askubuntu.com/users/1366/
http://blog.stackexchange.com
http://blog.stackoverflow.com/2009/06/attribution-required/
http://chat.stackexchange.com/
http://creativecommons.org/licenses/by-sa/3.0/
http://gaming.stackexchange.com/users/2790/
http://meta.stackoverflow.com
http://meta.stackoverflow.com/users/147747/
http://programmers.stackexchange.com/users/116/
http://serverfault.com/users/45166/
http://stackoverflow.com/users/360899/
http://superuser.com/users/39401/
http://twitter.com/stackexchange
http://unix.stackexchange.com/users/1170/
http://www.facebook.com/stackexchange
https://plus.google.com/+StackExchange

答案2

好吧,我必须找到自己的答案:

我使用的工具是追踪

httrack -p0 -r2 -d www.example.com
  • -p0选项告诉它只扫描(不保存页面);
  • -接收选项告诉它搜索的深度
  • -d选项告诉它留在同一个主域上

甚至还有一个 -%L 来将扫描到的 URL 添加到指定的文件,但似乎不起作用。但这不是问题,因为在 hts-cache 目录下你可以找到一个硅通孔 (TSV)文件名新内容.txt包含所有访问过的 URL 以及一些其他信息。我可以使用以下 Python 代码从中提取 URL:

with open("hts-cache/new.txt") as f:
    t = csv.DictReader(f,delimiter='\t')
    for l in t:
        print l['URL']

相关内容