【问题标题】:using wget to log redirected URLs shell script使用 wget 记录重定向的 URL shell 脚本
【发布时间】:2012-06-22 01:27:53
【问题描述】:

我试图找到一种使用 wget 将重定向的网站 URL 列表记录到一个文件中的方法。 例如:

www.website.com/1234 现在重定向到 www.newsite.com/a2as4sdf6nonsense

www.website.com/1235 现在重定向到 www.newsite.com/ab6haq7ah8nonsense

Wget 会输出重定向,但不会记录新位置。我在终端得到这个:

HTTP request sent, awaiting response...301 moved permanently
Location: http.www.newsite.com/a2as4sdf6 

...

我只想将该新 URL 捕获到文件中。

我用的是这样的东西:

    for i in `seq 1 9999`; do
        wget http://www.website.com/$i -O output.txt
    done

但这会将每个网页的源代码输出到该文件。我试图只检索重定向信息。另外,我想在每次检索新 URL 时在同一个输出文件中添加一个新行。

我希望输出看起来像:

    www.website.com/1234 www.newsite.com/a2as4sdf6nonsense
    www.website.com/1235 www.newsite.com/ab6haq7ah8nonsense

...

【问题讨论】:

  • 如果您愿意考虑 Perl,而不是 wget,您可以尝试使用 Perl 模块 WWW::Mechanize,如该解决方案中所述:stackoverflow.com/questions/10922054/…
  • 这对我有用。谢谢!我现在唯一陷入困境的部分是使用提到的代码并在 Perl 中循环。我该如何运行: www.website.com/n 其中 n 是从 1 到 100 的数字?
  • foreach(1..100) { my $site = "www.website.com/$_"; # do something with $site; }
  • 完美。感谢您的帮助。

标签: shell url redirect wget ping


【解决方案1】:

这不是一个完美的解决方案,但它确实有效:

wget http://tinyurl.com/2tx --server-response -O /dev/null 2>&1 |\
   awk '(NR==1){SRC=$3;} /^  Location: /{DEST=$2} END{ print SRC, DEST}'

wget 不是一个完美的工具。 curl 会更好一点。

它是这样工作的:我们得到 url,但我们将所有输出(页面内容)重定向到 /dev/null。我们要求服务器响应 http 标头(以获取 Loaction 标头),然后将其传递给 awk。 请注意,可能有多个重定向。我以为你想要最后一个。 awk 从第一行 (NR==1) 获取您要求的 URL,并从每个 Location 标头获取目标 URL。最后,我们根据您的需要打印 SRC 和 DESC。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多