はじめに
seleniumを使用してサイト調査をしておりまして、
昨今のスクレイピング禁や例の図書館事件も含めビビり倒しながらの調査の私です。
問題が発生したわけではないのですが、
露骨に人間アピールをしようと思って下記のようなメソッドを作ってみました。
多分みんなやっていると思いますが。
該当ソースコード
def rndSleep
rnd = rand(5) + 1
sleep rnd.to_i
end
rand(5) + 1
で1~5のランダムな数字をrudに代入して、
動作を〇秒間停止するsleepメソッド、〇秒部分に当てています。
人間アピールしたい箇所にrndSleep
を入れると1~5秒おいて実行してくれます。
私は繰り返し処理の、処理開始前に一息ついてもらう感じにしてます。
while true do
index = index + 1
rndSleep # <= ここで一息
begin
news = driver.find_element(:xpath, "/html/body/div[3]/div[1]/div[2]/div[2]/div/table/tbody/tr[#{index}]/td[2]/a")
href = news.attribute('href')
newsUrl << href
rescue Selenium::WebDriver::Error::NoSuchElementError
break
end
end
おわりに
実際にBANされたりとか、ブロックされたりはないのですが、
されたら怖いのでちょっとでも抗いたい。
中身の調査をして抜け漏れ予防したいので、負荷かけたいわけではない。
つまり共存したいのです。
なので、プログラム実行側でうまいこと負荷を分散させて、
「人間ですよ~いいコンテンツですね~たくさん回遊しちゃうな~」
的なアピールをして乗り切る必要があるのではないかと感じました。
ちなみに、要素が表示されるまで待つことにsleepメソッドを使用するのは効率が悪いので、
下記の記事を参考にしていただいた方が良いかと思います。