5.11 查找网站中的无效链接
我曾目睹过人们纯手动检查网站上的每一个页面以便查找出无效的链接。这对于一些页面不多的小网站来说还有可能。如果页面数量增多,纯手动的话就不现实了。要是能够将查找无效链接的工作自动化,那可就轻松太多了。而我们也确实可以借助HTTP处理工具来查找无效的链接。来看看这是怎样实现的。
5.11.1 预备知识
要识别链接并从中找出无效链接,我们可以使用lynx
和curl
。lynx
有一个选项 -traversal
,能够以递归方式访问网站页面并建立网站中所有超链接的列表。我们可以用curl
验证每一个链接的有效性。
5.11.2 实战演练
用curl
查找网页上无效链接的Bash脚本如下:
#!/bin/bash
#文件名: find_broken.sh
#用途: 查找网站中的无效链接
if [ $# -eq 2 ];
then
echo -e "$Usage $0 URL\n"
exit -1;
fi
echo Broken links:
mkdir /tmp/$$.lynx
cd /tmp/$$.lynx
lynx -traversal $1 > /dev/null
count=0;
sort -u reject.dat > links.txt
while read link;
do
output=`curl -I $link -s | grep "HTTP/.*OK"`;
if [[ -z $output ]];
then
echo $link;
let count++
fi
done < links.txt
[ $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
命令。