あいさつ
匿名IPをローテさせてアクセス制限を気にせずガシガシScrapingする方法を紹介します.
今回はRuby+Nokogiriで済む簡単なモノを紹介しますが、PhantomJSやSeleniumにプロキシをかましても同じような事が出来ます.
- 悪用は良くない
http://proxymesh.com/
http://proxymesh.com/ まずはここで会員登録.
無料版もあるのでそれで済むならそれでいいかも.
ここで登録したusername
①とpassword
②は後で使うので控えておく.
ダッシュボードに表示されているAuthorized済みのProxyのHost③とPort④を控えておく.
NokogiriでGogo
#open
のproxy_http_basic_authentication
オプションを使えばおk
require "open-uri"
class OpenWithProxy
def initialize(proxy_host, proxy_port, username, pass)
@proxy_uri = URI.parse("#{proxy_host}:#{proxy_port}")
@username = username
@pass = pass
end
def open(url)
Kernel.open(url, proxy_http_basic_authentication: [@proxy_uri, @username, @pass])
end
end
owp = OpenWithProxy.new('③で控えたやつ', '④で控えたやつ', '①で控えたやつ', '②で控えたやつ')
# こんな感じ. owp = OpenWithProxy.new('http://us.proxymesh.com', '31280', 'username', 'password')
ちゃんとプロキシを噛んでるか確認
を使うとIPが確認できる.
require 'json'
check_ip = -> { JSON.parse(owp.open('http://api.ipify.org?format=json').read)['ip'] }
check_ip.call
#=> "166.78.113.337"
check_ip.call
#=> "166.28.153.347"
check_ip.call
#=> "192.237.163.323"
...
おお、10個のIPの内から毎回ランダムで選ばれるぽい、いいね
Nokogiriに渡してガシガシ
require 'nokogiri'
doc = Nokogiri::HTML owp.open('https://www.google.com')
doc.title
#=> "Google"
いいね!