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.
我发现这个 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.