如何查看网页中损坏的链接?

时间:2012-02-05 12:06:26

标签: bash

我在博客中保留了一些指向某些资源的链接列表 如果我发现链接已损坏,我会向其添加class="broken" 有时,断开的链接会再次显示为活动状态,因此我删除了class="broken" 当列表很长时,很难一个一个地检查它们。

<ul>
  <li><a href="http://www.a.com">a</a></li>
  <li><a href="http://www.b.com">b</a></li>
  <li><a href="http://www.c.com" class="broken">c</a></li>
  <li><a href="http://www.d.com">d</a></li>
</ul>

如何编写bash脚本进行编辑?

2 个答案:

答案 0 :(得分:0)

也许这不是你正在寻找的答案,但为什么要从bash中做到这一点,而不是编写页面来使用可以根据请求/动态执行此操作的javascript?这应该让你去http://www.egrappler.com/jquery-broken-link-checker-plugin-jslink/

但我认为也可以使用jQuery $ .get / $ .load方法自行创建类似的逻辑

答案 1 :(得分:0)

Bash不太合适。

  • 选项1:我使用Java或Groovy,有一个SAX处理程序只是将所有数据转储到输出,除了它将检查<a>值的href元素,如果损坏,请添加class="broken"部分。

  • 选项2:拥有一个可以在<a>元素上调用自定义XSLT函数的XSLT。我再次使用Java,但任何具有良好XSLT引擎的语言都可以做到这一点。

  • 选项3:如果你真的想要感到怪异;-)这里有一条线来为Bash找到非常不可靠的链接检查器:

grep -R '(?:href="(http://[^"]+)")' -ohPI | grep -oP 'http://[^"]+' | sort | uniq |  wget -nv -S -O /dev/null -i - 2>&1 | grep -P '(wget:| -> |HTTP/|Location:)'

它可能会变得更好,但我对此感到满意。

  • 选项4:您可以使用curl -L ...-L跟随重定向)而不是wget
grep -R '(?:"(http://[^"]+)")' -ohPI | grep -v search.maven.org | grep -oP 'http://[^"]+' | sort | uniq |  xargs -I{} sh -c 'echo && echo "$1" && curl -i -I -L -m 5 -s -S "$1"' -- {}  2>&1 | grep -P '(^$|curl:|HTTP/|http://|https://|Location:)'

专业提示:curl似乎有更多脚本友好的输出,因此您可以使其平行以加快速度:... | xargs -n 1 -P 8 curl -L ...这将运行8个curl进程,并传递一个参数(URL)一次。排序输出取决于你,我可能为每个curl调用创建一个文件然后连接。