Bash shell 用于查找机器人元标记值的脚本

Bash shell script to find Robots meta tag value

我发现这个 bash 脚本到 check status of URLs from text file 并在重定向时打印目的地 URL :

#!/bin/bash
while read url
do
    dt=$(date '+%H:%M:%S');
    urlstatus=$(curl -kH 'Cache-Control: no-cache' -o /dev/null --silent --head --write-out '%{http_code} %{redirect_url}' "$url" )
    echo "$url $urlstatus $dt" >> urlstatus.txt

done < 

我在 bash 方面不太擅长:我想为每个 url 添加其 Robots 元标记的值(如果存在)

实际上我真的建议使用 DOM 解析器(例如 Nokogiri、hxselect 等), 但是你可以这样做(例如处理以 <meta 和 "extracts" 机器人属性内容的值开头的行):

curl -s "$url" | sed -n '/\<meta/s/\<meta[[:space:]][[:space:]]*name="*robots"*[[:space:]][[:space:]]*content="*\([^"]*\)"*\>//p'

这将打印属性值或空字符串(如果不可用)。

您需要纯 Bash 解决方案吗?或者你有 sed?

您可以添加一行以从页面的源代码中提取机器人的 meta header 并使用 echo[修改该行=30=] 显示其值:

#!/bin/bash
while read url
do
    dt=$(date '+%H:%M:%S');
    urlstatus=$(curl -kH 'Cache-Control: no-cache' -o /dev/null --silent --head --write-out '%{http_code} %{redirect_url}' "$url" )
    metarobotsheader=$(curl -kH 'Cache-Control: no-cache' --silent "$url" | grep -P -i "<meta.+robots" )
    echo "$url $urlstatus $dt $metarobotsheader" >> urlstatus.txt
done < 

这个例子用 meta header 记录机器人的原始行。

如果你想在页面没有meta header机器人时添加一个标记“-”,你可以改变metarobotsheader行,然后放这个:

    metarobotsheader=$(curl -kH 'Cache-Control: no-cache' --silent "$url" | grep -P -i "<meta.+robots" || echo "-")

如果要提取属性的准确值,可以更改该行:

    metarobotsheader="$(curl -kH 'Cache-Control: no-cache' --silent "$url" | grep -P -i "<meta.+robots" | perl -e '$line = <STDIN>; if ( $line =~ m#content=[\x27"]?(\w+)[\x27"]?#i) { print ""; } else {print "no_meta_robots";}')"

当 URL 不包含任何 meta header 机器人时,它将显示 no_meta_robots.