本記事について
wget -O - を実施した際に、
The requested URL was rejected. Please consult with your administrator.というエラーがでましたが、
wget -O - -U ""とするとエラーが解消した話です。
詳細
発生した事象
桂離宮という京都有数の観光地の参観予約情報を取得すべく、宮内庁のHPについてwgetを行いました。
例えば、後ろの数字を年月の6桁の数字にすればhtmlが取得できるはずが、
wget -O - https://sankan.kunaicho.go.jp/register/frame/4201?ym=201703 ⏎ <html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is...
エラーとなりました。
「-O - 」はコマンドの結果を標準出力に出すためのオプション です。
ちなみにブラウザで見るとこんな感じで見れます。
memo
環境によっては証明書の発行者が不明というエラーが先に出る場合があるかとは思いますが、接続先が信用できる場合では 「--no-check-certificate」 を追記ですればアドホックに対応可能です。
解決策
で、結論から言えばブラウザ等でhtmlを取得する際はブラウザ名がユーザエージェントというところに記載されているのですがここを変更すれば解決しました。
Bot対策でCUIでのwgetを排除しているのでしょうか。
実際に、オプション 「-U "" 」を用いて明示的にユーザエージェントを空欄に変更してみると、
wget -O - -U "" https://sankan.kunaicho.go.jp/register/frame/4201?ym=201703 ⏎ <html> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <META http-equiv="Content-Style-Type" content="text/css"> ...以下略
といった形で正規のhtmlを取得できました。
あとは、
日付情報↓
<TD width="20" align="center"><B>01</B></td>
参観可能人数情報↓
<img src="/images/false.gif">10:00(0人)
といったような構造を考慮して以下のワンライナーで結果を取り出してみました。
読み方は、3月1日の15:30から2人空いている、といった感じです。
$ wget -O - -U "" https://sankan.kunaicho.go.jp/register/frame/4201?ym=201703 2>/dev/null | grep -B 10 '[1-9]人' | grep -e '[1-9]人' -e '<B>[0-9][0-9]</B>' | awk 'BEGIN{FS="[><]"}{print $5}' ⏎ 01 15:30(2人) 02 10:00(1人) 15:30(2人) 03 09:00(4人) 13:30(1人)
ワンライナーに関する説明は備考欄に。興味がある方のみご覧ください。*1
以上です。