Posted at

匿名IP(月10ドル)でガシガシScraping、Ruby+Nokogiriソース付

More than 3 years have passed since last update.


あいさつ

匿名IPをローテさせてアクセス制限を気にせずガシガシScrapingする方法を紹介します.

今回はRuby+Nokogiriで済む簡単なモノを紹介しますが、PhantomJSやSeleniumにプロキシをかましても同じような事が出来ます.


  • 悪用は良くない


http://proxymesh.com/

http://proxymesh.com/ まずはここで会員登録.

無料版もあるのでそれで済むならそれでいいかも.

ここで登録したusername①とpassword②は後で使うので控えておく.

Screen Shot 2015-04-08 at 6.04.09 PM.png

ダッシュボードに表示されているAuthorized済みのProxyのHost③とPort④を控えておく.


NokogiriでGogo

#openproxy_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')


ちゃんとプロキシを噛んでるか確認

http://api.ipify.org?format=json

を使うと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"

いいね!