Grep 蜘蛛网站和返回网址只

Grep 蜘蛛网站和返回网址只,grep,uri,wget,web-crawler,Grep,Uri,Wget,Web Crawler,我正在寻找一种方法来创建一个网站。关键是我实际上并不想要内容,而是想要一个简单的URI列表。通过使用--spider选项,我可以相当接近这个想法,但是当通过grep管道传输输出时,我似乎找不到合适的方法来实现它: wget --spider --force-html -r -l1 http://somesite.com | grep 'Saving to:' grep过滤器似乎对wget输出没有任何影响。我是否有什么地方出错,或者是否有其他工具更适合提供这种有限的结果集 更新 所以我刚刚发现,

我正在寻找一种方法来创建一个网站。关键是我实际上并不想要内容,而是想要一个简单的URI列表。通过使用
--spider
选项,我可以相当接近这个想法,但是当通过
grep
管道传输输出时,我似乎找不到合适的方法来实现它:

wget --spider --force-html -r -l1 http://somesite.com | grep 'Saving to:'
grep
过滤器似乎对
wget
输出没有任何影响。我是否有什么地方出错,或者是否有其他工具更适合提供这种有限的结果集

更新

所以我刚刚发现,默认情况下,
wget
会写入stderr。我在手册页中遗漏了这一点(事实上,如果它在那里,我仍然没有找到)。一旦我通过管道返回到标准输出,我就更接近我所需要的:

wget --spider --force-html -r -l1 http://somesite.com 2>&1 | grep 'Saving to:'

我仍然对其他更好的方法感兴趣,如果有的话。

创建一些正则表达式来提取所有地址

<a href="(ADDRESS_IS_HERE)">.
我最不想做的事情就是自己下载并解析所有内容(即创建自己的spider)。一旦我了解到Wget在默认情况下写入stderr,我就能够将它重定向到stdout并适当地过滤输出

wget --spider --force-html -r -l2 $url 2>&1 \
  | grep '^--' | awk '{ print $3 }' \
  | grep -v '\.\(css\|js\|png\|gif\|jpg\)$' \
  > urls.m3u
这给了我一个spidered的内容资源(不是图像、CSS或JS源文件的资源)URI的列表。从那里,我可以将URI发送给第三方工具进行处理,以满足我的需要

输出仍然需要稍微简化(如上图所示,它会产生重复的输出),但它几乎就在那里,我自己也不需要做任何解析。

我使用了一个名为


有点粗俗,但会让你更亲近!这只是第一个层次。想象一下将其打包成一个自递归脚本

查看这个问题/答案,了解使用python脚本的另一种方法:wget-r--spider-l1-a mp3的可能重复http://example.com/page-with-mp3s 2> &1| grep-Eio http.+mp3对我来说是一张很好的魔术票。谢谢我通常会将该输出传递给
sort | uniq
,以删除重复项,仅供参考。我知道这个答案已经过去了5年,但您能加快这个过程吗?对于具有200 URL的站点,这需要几秒钟甚至几分钟。如果将第一个
grep
awk
命令替换为单个
egrep-o'https?://[^]+'
,您可以大大缩短这方面的时间。我也建议使用管道对uniq进行排序,因为这样可以减少第三方工具在重复URL上的工作量。非常酷。但是Win32版本的工具令人窒息。。。某处。你能告诉我如何为Cygwin或直窗修改它们吗?@Snowy我不知道你说的“窒息”是什么意思。Cygwin应该很好用。您也可以尝试使用
curl
而不是
wget
。我想指出@Rob希望从网站而不是网页获取所有URL。好的,不管怎样,我将grep命令改为:
grep-I-o']\+href[]*=[\t]*“[^”]\+>[^谢谢……这看起来非常适合编写解决wget问题的脚本()
http://blog.craigslist.org/
http://24hoursoncraigslist.com/subs/nowplaying.html
http://craigslistfoundation.org/
http://atlanta.craigslist.org/
http://austin.craigslist.org/
http://boston.craigslist.org/
http://chicago.craigslist.org/
http://cleveland.craigslist.org/
...
wget --spider --force-html -r -l2 $url 2>&1 \
  | grep '^--' | awk '{ print $3 }' \
  | grep -v '\.\(css\|js\|png\|gif\|jpg\)$' \
  > urls.m3u
xidel http://server -e '//a/@href' | 
grep -v "http" | 
sort -u | 
xargs -L1 -I {}  xidel http://server/{} -e '//a/@href' | 
grep -v "http" | sort -u