動かざることバグの如し

近づきたいよ 君の理想に

Mechanizeでページを取得するたびにランダムなプロキシサーバーを設定

スクレイピングに便利なMechanize

だけどアクセスしまくるとBANされてしまうのでプロキシを使うことで回避しようという話

環境

  • ruby 2.3
  • Mechanize
  • プロキシサーバー2台以上
  • 同じポートでアクセスできるようにしてあると便利である

やりかた

モンキーパッチ?はやり方がよくわからないので、Mechanizeクラスを継承して新しくオレオレクラスを作成する

class MechanizeHelper < Mechanize
  def get(uri, parameters = [], referer = nil, headers = {})
    proxies = ['8.8.8.8', '8.8.4.4']
    self.set_proxy(proxies.sample, 8888)
    self.max_history = 1
    self.keep_alive = false
    self.read_timeout = 60
    super
  end
end

これでつかうときにMechanizeHelperをイニシャライズする

agent = MechanizeHelper.new
agent.get('https://www.yahoo.co.jp/')

これで診断くんとか見るとたしかにIPがランダムに変わっている