Ruby
AWS
スクレイピング

AWS EC2インスタンスからのスクレイピングがサイトからブロックされた話

ruby mechanizeを用いて
AWS EC2インスタンスから某ファッションサイトにスクレイピングを実行したところ、

     9: from /usr/local/lib/ruby/2.5.0/net/http.rb:443:in `get_print'
     8: from /usr/local/lib/ruby/2.5.0/net/http.rb:485:in `get_response'
     7: from /usr/local/lib/ruby/2.5.0/net/http.rb:609:in `start'
     6: from /usr/local/lib/ruby/2.5.0/net/http.rb:909:in `start'
     5: from /usr/local/lib/ruby/2.5.0/net/http.rb:920:in `do_start'
     4: from /usr/local/lib/ruby/2.5.0/net/http.rb:935:in `connect'
     3: from /usr/local/lib/ruby/2.5.0/timeout.rb:103:in `timeout'
     2: from /usr/local/lib/ruby/2.5.0/net/http.rb:937:in `block in connect'
     1: from /usr/local/lib/ruby/2.5.0/net/http.rb:937:in `open'
/usr/local/lib/ruby/2.5.0/net/http.rb:937:in `initialize': execution expired (Net::OpenTimeout)

のようなエラーで処理が止まってしまった。これはどうやら調べてみると

https://webbigdata.jp/what-is-bigdata/page-207

の記事[4]に書いてあるように、

大規模なサイトは、クローラーによるデータ収集が出来ないようにIPアドレスによる制限をかけてくる場合があります。

IP制限がかかっていると推測される。

他の方からの話を聞くと、

  • heroku
  • ec2

でのアクセスがブロックされているのは確認できた。もしかすると他のホスティングサービスでもブロックされているかもしれないとのこと

なのでもしスクレイピングが集中しているサイトだと、こういった制限がかけられているかもしれない。

疑問なところ

疑問点が一つあり、EC2のパブリックIP(Elastic IP)を確認したところ

52.194.435.49
124.113.457.237
54.924.8425.4222

のようにかなりばらけていることが確認できた。

こんなにばらけているのなら、サイト側はどのようにして
ホスティングサービスからのアクセスなのか、他の一般ユーザーからのアクセスなのかを識別しているのだろうか、わかる方がいらっしゃったら是非教えて欲しいです。