Скрипт Bash для поиска значения метатега Robots - PullRequest
0 голосов
/ 06 ноября 2019

Я нашел этот скрипт bash для проверки статуса URL-адресов из текстового файла и печати целевого 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 < $1

Я не так хорош в bash: Я хотел бы добавить - для каждого URL - значение его метатега Robots (если он существует)

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Вы можете добавить строку для извлечения заголовка meta для роботов из исходного кода страницы и изменить строку с помощью echo , чтобы показать ее значение:

#!/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 < $1

В этом примере записывается исходная строка с заголовком meta для роботов.

Если вы хотите поставить отметку "-", когда на странице нет meta заголовок для роботов, вы можете изменить строку 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 "$1"; } else {print "no_meta_robots";}')"

Если URL-адрес не содержит заголовка meta для роботов, он будет отображать no_meta_robots .

0 голосов
/ 06 ноября 2019

На самом деле я бы действительно предложил парсер DOM (например, Nokogiri, hxselect и т. Д.), Но вы можете сделать это, например, (обрабатывает строки, начинающиеся с <meta и «извлекает» значение содержимого атрибута роботов):

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

Это напечатает значение атрибута или пустую строку, если она недоступна.

Вам нужен чистый Bash-решение? Или у вас есть sed?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...