目 录CONTENT

文章目录

发一个定时采集政府采购公式信息的的脚本

酷谷的谷子
2025-01-12 / 0 评论 / 0 点赞 / 11 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

这个本来使用Pytorch是最好的

作者:腾讯元宝、酷谷的谷子

Replacement.sh脚本在后面责怪脚本的用来替换字符串的,会吧关键自的绝对路保存到finddirA.txt

http://tjgpc.zwfwb.tj.gov.cn/webInfo/getWebInfoListForwebInfoClass.do?fkWebInfoclassId=W004_004
#!/bin/bash
#--------------------
# 2025-01-03 第二版
# 作者:腾讯元宝、酷谷的谷子
#--------------------
rm -rf ${HOME}/index-file/x.txt
mkdir -p ${HOME}/index-file/tmp
my_run_a(){
#验证是否循环
echo "111" >> ${HOME}/index-file/x.txt
IndexFileDir="${HOME}/index-file"
MYurl_W004_004="http://tjgpc.zwfwb.tj.gov.cn/webInfo/getWebInfoListForwebInfoClass.do?fkWebInfoclassId=W004_004"
#sleep 2
cd ${IndexFileDir}
#删除下载页面
rm -rf ${IndexFileDir}/*.html
#下载页面--更正公告                                                     
curl -o W004_004.html ${MYurl_W004_004}
#--------------------
# 判断系统时间和页面时间,是否存在,如果不存在就退出
#--------------------
MY_Time="0"
#SystemTime="2024-12-18"
SystemTime=`date +%Y-%m-%d`
IndexFileTime=`cat ${IndexFileDir}/W004_004.html|grep "${SystemTime}"|wc -l`

if [[ ! X${MY_Time} = X${IndexFileTime} ]];then
  echo "OK"   
else
  echo "err"
  #exit 0 
fi
#--------------------
# 找出更正公告页面的-第一页的链接,应为只要最新的,这样就简单了
#--------------------
rm -rf ${IndexFileDir}/NewUrl.txt
#匹配网址特征字符串5A19D9A2-C12B-479A-A2C7-E3FACD9528B6
awk '{if ($0 ~ /[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}/) print $0}' \
${IndexFileDir}/W004_004.html|grep -oP "\"\K[^\"]+(?=\")"|grep 'http' >> ${IndexFileDir}/NewUrl.txt
#--------------------
# 下载 NewUrl.txt 中的链接
#--------------------
UrlDownload(){
rm -rf ${IndexFileDir}/NewUrl
mkdir -p ${IndexFileDir}/NewUrl
cd ${IndexFileDir}/NewUrl
while IFS= read -r url; do
    echo "正在下载 $url ..."
    curl -s --remote-name "$url"

    if [ $? -eq 0 ]; then
        echo "下载成功。"
        sleep 0.5
    else
        echo "下载失败: $url"
    fi
done < ${IndexFileDir}/NewUrl.txt

}

#--------------------
# 在 NewUrl 目录查包行当前系统日期的文件并重命名,复制到当天日期目录
#--------------------
CopyFiles(){
mkdir -p ${IndexFileDir}/${SystemTime}
${IndexFileDir}/Replacement.sh ${IndexFileDir}/NewUrl ${SystemTime} ${SystemTime} > /dev/null 2>&1
while IFS= read -r listDir; do
  #读取标题
  xxxXX_A(){
  cat ${listDir}|grep 'ArticleTitle'|grep -oP "\"\K[^\"]+(?=\")"|sed -n 3p
  }
  #读取发布日期
  xxxXX_B(){
  cat ${listDir}|grep 'PubDate'|grep -oP "\"\K[^\"]+(?=\")"|sed -n 3p|sed 's/ //g'
  }
  #mv ${listDir} "${IndexFileDir}/${SystemTime}/`xxxXX_B`-`xxxXX_A`.html"
  #提取文字
  xxxXX_C(){
  xmllint --html --xpath "string(//div[@class='main-cont'])" ${listDir} 2>/dev/null|grep -v '\^' |\
  grep -i -v -e '#noticeArea' -e 'text-decoration' \
  -e '相关附件' -e '公告差异化样式' -e '^\s*$' -e '123.html:' \
  -e 'outline-offset' -e 'outline' -e '征集文件' |awk '{gsub(/ /,"");print}' \
  >> "${IndexFileDir}/${SystemTime}/`xxxXX_B`-`xxxXX_A`.TXT"
  }
  xxxXX_C
    
  sleep 0.5
done < /tmp/i8520-98w7e9wqe_find-0806/finddirA.txt
#2024-12-3105:05:06
#awk '{if ($0 ~ /[0-9]{4}-[0-9]{2}-[0-9]{4}:[0-9]{2}:[0-9]{2}/) print $0}'
echo "OK"
}
#--------------------
# 第一次处理
#--------------------
if [[ -f "${IndexFileDir}/tmp/url_list_${SystemTime}.txt" ]]  ; then
    echo "url_list_${SystemTime}.txt OK"
else
    #echo "文件不存在"
    UrlDownload
    CopyFiles
    cat "${IndexFileDir}/NewUrl.txt" > ${IndexFileDir}/tmp/url_list_${SystemTime}.txt
fi
#--------------------
# 最后数据处理
#--------------------
LOCAL_FILE="${IndexFileDir}/tmp/url_list.txt"
TEMP_FILE="${IndexFileDir}/NewUrl.txt"
DIFF_OUTPUT="${IndexFileDir}/diff_output.log"
# 对比两个文件,找出不同的行
echo "[$LOCAL_FILE] 正在对比文件差异..."
diff -u "$LOCAL_FILE" "$TEMP_FILE" | grep '^+' | grep -v '^+++' > "$DIFF_OUTPUT.new"
# 检查是否有差异
if [[ -s "$DIFF_OUTPUT.new" ]]; then
    echo "[$CURRENT_TIME] 发现以下不同的行:"
    cat "$DIFF_OUTPUT.new"
    sed -i 's/^+//' "$DIFF_OUTPUT.new"
    UrlDownload_A(){
    rm -rf ${IndexFileDir}/NewUrl
    mkdir -p ${IndexFileDir}/NewUrl
    cd ${IndexFileDir}/NewUrl
    while IFS= read -r url; do
    echo "正在下载 $url ..."
    curl -s --remote-name "$url"

    if [ $? -eq 0 ]; then
        echo "下载成功。"
        sleep 0.5
    else
        echo "下载失败: $url"
    fi
    done < "$DIFF_OUTPUT.new"
    }
    UrlDownload_A
    # 在 NewUrl 目录查包行当前系统日期的文件并重命名,复制到当天日期目录
    CopyFiles
    # 更新文件url_list.txt
    cat "${IndexFileDir}/NewUrl.txt" > ${IndexFileDir}/tmp/url_list_${SystemTime}.txt
else
    echo "err"
fi
# 清理临时文件
rm "$DIFF_OUTPUT.new"

echo -e "\n----------------\n所有数据已经处理完毕\n数据保存在${IndexFileDir}/${SystemTime}\n........"
}
      my_run_a
while true ; do

      sleep  450s
            my_run_a

done

Replacement.sh

#!/bin/bash
#-----------------------
# 修改时间 2022.12.10-0955
# 优化脚本执行 更快 更准确
#-----------------------
#替换的文件夹目录 会自动查询子目录
rm -rf /finddirA.sh
name_dir="$1"
#替换前
B="$2"
#替换后
A="$3"
abcdfe="========================================="
finddir="/tmp/i8520-98w7e9wqe_find-0806"
rm -rf $finddir
mkdir -p $finddir
#-----------------------
# 获得需要替换的列表文件
#-----------------------
#获得当前目录以及子目录的文件数量
find_p=`find $name_dir -type f -name "*" | awk '{print "\""$0}' | awk '{print $0"\""}' | wc -l`
#查找到要替换的文件,如果有就输出带路径在哪一行并且保存到$finddir/1.txt,所以可能会出现多行一样的情.
grep -rEn "${B}" "${name_dir}" | grep -v "Binary file" > $finddir/1.txt
#去除 :以及相邻空格后的字符以及再次过滤掉空格后面的字符 
cat $finddir/1.txt | sed 's@:[^ ]*@@g' | sed "s/ .*$//" > $finddir/2.txt
#去除重复的行
sort -k2n $finddir/2.txt | awk '{if ($0!=line) print;line=$0}' > $finddir/finddirA.txt
#把预设转换代码加到 文件路径前面 并保存 到 finddirA.sh 脚本 。简单说finddirA.txt转换成具体功能脚本finddirA.sh
awk '{print "sed -i -r \"s/$A/$B/g\" "$0}'  $finddir/finddirA.txt >$finddir/finddirA.sh
chmod -R 750 $finddir/finddirA.sh
#替换字符得到完美的执行脚本 这里不要改
sed -i "s/\$A/$B/g" $finddir/finddirA.sh
sleep 0.5
sed -i "s/\$B/$A/g" $finddir/finddirA.sh
sleep 0.5
#-----------------------
# 是否执行替换脚本
#-----------------------
BUG_ABC_1="0"
# $BUG_ABC_2 等于0 不执行 finddirA.sh 应为是空文件
BUG_ABC_2=$(cat $finddir/finddirA.txt | wc -l)
if [[ ! x${BUG_ABC_1} = x${BUG_ABC_2} ]];then
echo -e "${abcdfe}\n\n执行脚本已创建,正在执行替换脚本......\n"
#执行替换脚本
mv $finddir/finddirA.sh /
echo -e "替换成功!一共查询 ${find_p} 个文件。匹配到 ${BUG_ABC_2} 个文件\n\n${abcdfe}" 
else
echo -e "${abcdfe}\n\n替换失败!一共查询 ${find_p} 个文件 替换前${B}不存在\n\n${abcdfe}";exit
fi

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区