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)
のようなエラーで処理が止まってしまった。これはどうやら調べてみると
の記事[4]に書いてあるように、
大規模なサイトは、クローラーによるデータ収集が出来ないようにIPアドレスによる制限をかけてくる場合があります。
IP制限がかかっていると推測される。
他の方からの話を聞くと、
- heroku
- ec2
でのアクセスがブロックされているのは確認できた。もしかすると他のホスティングサービスでもブロックされているかもしれないとのこと
なのでもしスクレイピングが集中しているサイトだと、こういった制限がかけられているかもしれない。
疑問なところ
疑問点が一つあり、EC2のパブリックIP(Elastic IP)を確認したところ
52.194.435.49
124.113.457.237
54.924.8425.4222
のようにかなりばらけていることが確認できた。
こんなにばらけているのなら、サイト側はどのようにして
ホスティングサービスからのアクセスなのか、他の一般ユーザーからのアクセスなのか
を識別しているのだろうか、わかる方がいらっしゃったら是非教えて欲しいです。