背景
Yahooにクローリングをしていたらタイトル・以下のメッセージが返ってきました。
HTML (curlで取得)
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<!-- Title -->
<TITLE>
Yahoo! JAPAN - ご覧になろうとしているページは現在表示できません。
</TITLE>
<!---------------->
<style>
* {
margin: 0;
padding: 0;
font-size: 16px;
line-height: 1.7em;
}
body {
font-family: "Arial","Helvetica","メイリオ","ヒラギノ角ゴ",clean,sans-serif;
text-align: center;
}
p {
padding-bottom: 6px;
margin-bottom: 10px;
}
#doc {
width: 950px;
padding: 0 10px;
margin: 0 auto;
text-align: center;
}
#ygma {
overflow: hidden;
border-bottom: 1px solid #CCC;
padding: 0px 22px 4px;
text-align: right;
margin: 14px 0 53px;
}
#ygma img {
float: left;
}
#ygma div {
margin-left: 152px;
}
#bd {
clear: both;
text-align: left;
width: 75%;
margin: 0 auto 20px;
}
h1 {
font-size: 135%;
text-align: center;
margin: 0 0 15px;
}
#ft {
padding-top: 10px;
border-top: 1px solid #999;
}
#ft p {
text-align: center;
font:78% arial;
}
</style>
</HEAD>
<body><div id="doc">
<div id="ygma">
<!-- Logo -->
<a href="https://www.yahoo.co.jp"><img src="https://s.yimg.jp/c/logo/f/2.0/yj_r_34_2x.png" alt="Yahoo! Japan" border=0 width=147 height=38></a>
<!---------------->
<div>
<!-- YahooLink -->
<a href="https://www.yahoo.co.jp/">Yahoo! JAPAN</a>
<!---------------->
-
<!-- HelpLink -->
<a href="https://support.yahoo-net.jp/PccHelpcenter/s/">ヘルプ</a>
<!---------------->
</div></div>
<div id="bd"><h1>
<!-- HeaderMessage -->
ご覧になろうとしているページは現在表示できません。
<!---------------->
</h1>
<table>
<tr>
<td valign=top>
</td>
<td>
<p>
<!-- Apology -->
ご不便をおかけして申し訳ございませんが、お客様がご覧になろうとしているページは現在表示できません。
一時的なエラーですので、しばらく時間をおいてから再度お試しください。
<!---------------->
<p>
<!-- Explanation -->
もし、何度もこのページが表示される場合は、以下をご確認ください。
<!---------------->
<ul>
<li>
<!-- Viruses -->
スパイウエアやウイルスによってYahoo! JAPANへの接続が妨げられているかもしれません。
お客様のコンピュータについて、スパイウエアやウイルスのスキャンを行ってみてください。
スパイウエアやウイルス防御に関する詳細な情報については、<a href="https://security.yahoo.co.jp/">Yahoo!セキュリティセンター</a>をご参照くださ
い。
<!---------------->
<li>
<!-- ISP -->
お客様がご利用になっているインターネットサービスプロバイダが関連する、ネットワークのトラブルかもしれません。
インターネットサービスプロバイダにお問い合わせください。
<!---------------->
</ul>
<p style="display: block;">
<!-- Temporary -->
このエラーは一時的なものです。ただし、この状況が何度も続き、さらに上記の方法で解決しない場合は、<a href="https://fpr.yahoo.co.jp/?actionToken=....." alt="報告フォーム">報告フォーム</a>より弊社までお知らせください。<br>
<FONT COLOR=red>こちらのフォームは報告専用フォームのため、返答を確約するものではございません。ご了承ください。</FONT>
<!---------------->
<p>
<!-- Return -->
<p>
さらに詳しい情報については<a href="https://support.yahoo-net.jp/PccHelpcenter/s/">Yahoo! JAPANヘルプセンター</a>をご利用ください。
<!---------------->
</p>
</td>
</tr>
</table>
<p class="more">
<!-- HelpCentral -->
</p>
<!----------------->
</p>
</div><div id="ft"><p>
<!-- Copyright -->
<a href="https://privacy.yahoo.co.jp/" target=_top>プライバシー</a>
- <a href="https://about.yahoo.co.jp/common/terms/" target=_top>利用規約</a>
-
<a href="https://about.yahoo.co.jp/common/terms/chapter1/#cf3rd" target=_top>ガイドライン</a>
-
<a href="https://support.yahoo-net.jp/PccHelpcenter/s/" target=_top><font color=0000ff>ヘルプ・お問い合わせ</font></a>
<br>
© Yahoo Japan
<!--------------->
<!-- PrivacyPolicy -->
<!--------------->
<!-- TermsOfService -->
<!-------------------->
</p></div>
</div>
</BODY>
</HTML>
表示:
要するにYahooさん激おこです。
アクセス制限をかけられてしまったようです。
本当に申し訳ありません。
原因
シングルスレッドで実行していたので同時アクセスは行っていなかったのですが、sleepをかけずにアクセスしていたことが原因だと思われます。
User-Agent を変更すると一時的に解消しますが、最終的には同様のエラーとなります。
IP アドレスを変更しても同様です。
このことから、おそらくですが、一定時間内のアクセスリミットが設定されているのではないかと思います。
一定時間内に一定数以上のアクセスを行うと、一定時間のアクセス制限となる、ということなのでしょう。
whileで復帰時間を調べてみると、1時間でアクセス制限は解消されました。
所感ですが、1分間に300回で1時間制限といった動作なのかなと思います。300は適当ですが。
検証コマンド (アクセス制限後に実行):
while curl "https://yahoo.co.jp/..../"|grep " ご覧";do sleep 60; date; done
対策
アクセスごとにsleepで200ミリ秒待つようにしました。
結果、お叱りを受けずに済むようになりました。
とはいえ、200ミリ秒はギリギリを攻めすぎですので、もう少し待った方が良いでしょう。一般的には1秒待つのがマナーです。
Yahooさん申し訳ございませんでした。
コメント