自动替换HTML页面中的所有死链接文本

自动替换HTML页面中的所有死链接文本,html,regex,shell,curl,automation,Html,Regex,Shell,Curl,Automation,我有一个每日动态创建的固件下载页面,其中包含许多不同的下载链接: 现在并不是每天所有的下载都是有效的,但仍然需要注意的是,那些固件是不适用的 我考虑过通过正则表达式解析脚本,以获取该页面上的所有链接,然后启动一些curl调用,检查链接是否失效。如果无效,则将链接文本替换为“n/a”。此脚本成功检查包含字符串“gluon”的所有链接: #/bin/bash #在此处设置新版本 CUR=2018.1~ng-234 “每晚” OUT\u FILE=index.html wget-k--无检查证书htt

我有一个每日动态创建的固件下载页面,其中包含许多不同的下载链接:

现在并不是每天所有的下载都是有效的,但仍然需要注意的是,那些固件是不适用的


我考虑过通过正则表达式解析脚本,以获取该页面上的所有链接,然后启动一些curl调用,检查链接是否失效。如果无效,则将链接文本替换为“n/a”。

此脚本成功检查包含字符串“gluon”的所有链接:

#/bin/bash
#在此处设置新版本
CUR=2018.1~ng-234
“每晚”
OUT\u FILE=index.html
wget-k--无检查证书http://freifunk.in-kiel.de/firmware-rc.html -O$OUT\u文件
#替换模板中的数据
sed-i的|/sysupgrade/glon-ffki-|/sysupgrade/glon-ffki-'$CUR'| g'$OUT_文件
sed-i的|/factory/glon-ffki-|/factory/glon-ffki-'$CUR'| g'$OUT_文件
sed-i的|发布候选|“$BRANCH”/“$CUR”| g'$OUT_文件
echo-n“死链接检查”
#sed-i“s/tube2/nixtube2/g”$OUT_FILE#用于调试以创建死链接

无效的“>不适用您有一种方法可以遵循。你的方法没有那么糟糕。通过一个简单的表达式获取链接,比如,并用旋度测试它们。不过我还是喜欢某种编程语言,比如
Python
。你说你的页面是动态创建的,你不能修改这个创建脚本来检查链接,然后再将它们放到页面中吗?否则,为了加快速度,你可以改变语言。Perl(例如,您可以随心所欲地使用)比shell快得多。2) 在
wget
命令上设置一个相当小的超时。在死页上等待的时间越长,脚本所用的时间就越长。如果没有这些链接,则无法创建页面,创建是另一台服务器,我在其中创建了模板,无法始终重新生成此模板
#!/bin/bash
# set the new version here
CUR=2018.1~ngly-234
BRANCH='nightly'
OUT_FILE=index.html
wget -k --no-check-certificate http://freifunk.in-kiel.de/firmware-rc.html -O $OUT_FILE
# replace the data from the template
sed -i 's|/sysupgrade/gluon-ffki-<VERSION>|/sysupgrade/gluon-ffki-'$CUR'|g' $OUT_FILE
sed -i 's|/factory/gluon-ffki-<VERSION>|/factory/gluon-ffki-'$CUR'|g' $OUT_FILE
sed -i 's|release-candidate|'$BRANCH'/'$CUR'|g' $OUT_FILE
echo -n "dead link check "
#sed -i "s/tube2/nixtube2/g" $OUT_FILE  # for debug to create a dead link
INVALID='">n/a </a><deadlink none="'
while IFS= read -r URL; do
  if wget --no-check-certificate --spider "$URL" 2>/dev/null; then
    echo -n .
  else
    echo
    echo "$URL does not exist"
    sed -i 's|'$URL'|'$URL''"$INVALID"'|g' $OUT_FILE
  fi
#done < <(grep -Po '(?<=href=")[^"]*' $OUT_FILE|grep gluon|grep alfa)  # for debug
done < <(grep -Po '(?<=href=")[^"]*' $OUT_FILE|grep gluon)
echo "dead link check done"
sed -i 's|http://|//|g' $OUT_FILE