用shell脚本获取网页内容(仅供shell学习参考)
时间:2007-05-14 来源:cnscn2008
#!/bin/sh
#Name gethtml.sh
#Author cnscn <http://www.cnscn.org>
#Time 2006-09-15
#Uasge gethtml.sh src.txt
#
#src.txt
# index.shtmll||http://dnhgzx.chenhr.com/oem_webs/dnhgzx.chenhr.com/main.php||||1
# index2.shtml||http://www.bankhr.com/main.php||||1
# index3.shtml||http://www.healthr.com/main.php||||1
function read_line_file
{
#传递过来的文件名
FILENAME=$1;
#最大超时限制
MaxTimeout=3;
#最大尝试次数
MaxTryNums=3;
#{{{逐行读取文件内容
while read LINE
do
#获取源文件中一行内容,并分割成数组
arr=($(echo $LINE | awk -F"|" '{gsub(/\|\|/,"|");printf "\"%s\" \"%s\" \"%s\" \"%s\"",$1,$2,$3,$4 }' ));
#获取动态文件
url=$(echo ${arr[1]} | awk '{gsub(/"/,""); print $0}');
#获取静态文件路径
html=$(echo ${arr[0]} | awk '{gsub(/"/,""); print $0}');
#如果$url或$html为空则停止继续获取HTML,并进入下一轮循环
if [ -z $url ] || [ -z $html ]
then
continue
fi
trynums=0 #初始化尝试次数
#{{{尝试获取HTML
while [ "$trynums" -lt $MaxTryNums ]
do
if [ $trynums -eq 0 ]
then
echo -n "[${url}]...";
fi
#获取数据,并设置超时
content=$(GET -t $MaxTimeout $url);
#{{{如果获取成功,则把内容写入html文件
if [ $? -eq 0 ]
then
echo -n "GET [OK]...";
echo -e "${content}" > $html;
#如果写入HTML文件成功,则报告成功,否则报告失败并提醒用户查看路径和权限
if [ $? -eq 0 ]
then
echo "write html: ${html} [OK]";
else
echo "write html ${html} [Error], please check the directory or permission...";
fi
break
else
#如果已经是最后一次尝试,则宣告获取失败; 否则进入下一轮尝试
if [ $trynums -eq $(($MaxTryNums - 1)) ]
then
echo "Timeout... [error]";
else
echo -n "Timeout, try again...";
fi
fi
#}}}如果获取成功,则把内容写入html文件
#未能获取成功,则增加尝试次数
trynums=$(($trynums+1))
done
#}}}尝试获取HTML
done < $FILENAME
#}}}逐行读取文件内容
}
read_line_file $1
#Name gethtml.sh
#Author cnscn <http://www.cnscn.org>
#Time 2006-09-15
#Uasge gethtml.sh src.txt
#
#src.txt
# index.shtmll||http://dnhgzx.chenhr.com/oem_webs/dnhgzx.chenhr.com/main.php||||1
# index2.shtml||http://www.bankhr.com/main.php||||1
# index3.shtml||http://www.healthr.com/main.php||||1
function read_line_file
{
#传递过来的文件名
FILENAME=$1;
#最大超时限制
MaxTimeout=3;
#最大尝试次数
MaxTryNums=3;
#{{{逐行读取文件内容
while read LINE
do
#获取源文件中一行内容,并分割成数组
arr=($(echo $LINE | awk -F"|" '{gsub(/\|\|/,"|");printf "\"%s\" \"%s\" \"%s\" \"%s\"",$1,$2,$3,$4 }' ));
#获取动态文件
url=$(echo ${arr[1]} | awk '{gsub(/"/,""); print $0}');
#获取静态文件路径
html=$(echo ${arr[0]} | awk '{gsub(/"/,""); print $0}');
#如果$url或$html为空则停止继续获取HTML,并进入下一轮循环
if [ -z $url ] || [ -z $html ]
then
continue
fi
trynums=0 #初始化尝试次数
#{{{尝试获取HTML
while [ "$trynums" -lt $MaxTryNums ]
do
if [ $trynums -eq 0 ]
then
echo -n "[${url}]...";
fi
#获取数据,并设置超时
content=$(GET -t $MaxTimeout $url);
#{{{如果获取成功,则把内容写入html文件
if [ $? -eq 0 ]
then
echo -n "GET [OK]...";
echo -e "${content}" > $html;
#如果写入HTML文件成功,则报告成功,否则报告失败并提醒用户查看路径和权限
if [ $? -eq 0 ]
then
echo "write html: ${html} [OK]";
else
echo "write html ${html} [Error], please check the directory or permission...";
fi
break
else
#如果已经是最后一次尝试,则宣告获取失败; 否则进入下一轮尝试
if [ $trynums -eq $(($MaxTryNums - 1)) ]
then
echo "Timeout... [error]";
else
echo -n "Timeout, try again...";
fi
fi
#}}}如果获取成功,则把内容写入html文件
#未能获取成功,则增加尝试次数
trynums=$(($trynums+1))
done
#}}}尝试获取HTML
done < $FILENAME
#}}}逐行读取文件内容
}
read_line_file $1
相关阅读 更多 +