您好,尝试确定给定域下的所有有效 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
出所有href
s。sed
从 中挑选出 url 部分href
。sort
过滤掉重复的链接。
它还可以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']