5.11 查找网站中的无效链接

我曾目睹过人们纯手动检查网站上的每一个页面以便查找出无效的链接。这对于一些页面不多的小网站来说还有可能。如果页面数量增多,纯手动的话就不现实了。要是能够将查找无效链接的工作自动化,那可就轻松太多了。而我们也确实可以借助HTTP处理工具来查找无效的链接。来看看这是怎样实现的。

5.11.1 预备知识

要识别链接并从中找出无效链接,我们可以使用lynxcurllynx有一个选项 -traversal,能够以递归方式访问网站页面并建立网站中所有超链接的列表。我们可以用curl验证每一个链接的有效性。

5.11.2 实战演练

curl查找网页上无效链接的Bash脚本如下:

  1. #!/bin/bash
  2. #文件名: find_broken.sh
  3. #用途: 查找网站中的无效链接
  4. if [ $# -eq 2 ];
  5. then
  6. echo -e "$Usage $0 URL\n"
  7. exit -1;
  8. fi
  9. echo Broken links:
  10. mkdir /tmp/$$.lynx
  11. cd /tmp/$$.lynx
  12. lynx -traversal $1 > /dev/null
  13. count=0;
  14. sort -u reject.dat > links.txt
  15. while read link;
  16. do
  17. output=`curl -I $link -s | grep "HTTP/.*OK"`;
  18. if [[ -z $output ]];
  19. then
  20. echo $link;
  21. let count++
  22. fi
  23. done < links.txt
  24. [ $count -eq 0 ] && echo No broken links found.

5.11.3 工作原理

lynx -traversal URL会在工作目录下生成数个文件。这其中包括reject.dat,该文件包含网站中所有的链接。sort -u用来建立一个不包含重复项的列表。然后我们迭代每一个链接,并通过curl -I检验接收到的响应头部。如果响应头部的第一行包含HTTP/1.0 200 OK,就表示该链接正常。显示其他响应信息则表示该链接失效,并将其输出到stdout

5.11.4 参考

  • 5.3节讲解了lynx命令。

  • 5.4节讲解了curl命令。