RubyでGoogleをスクレイピングするというと、たいてい open-uri + Nokogiri、次にプロキシリスト、そしてヘッドレスブラウザへと進みます。ここでは安い代替手段を紹介します。HTTPコール1回で、Googleの結果を構造化JSONとして取得できます。Nokogiriもプロキシも不要です。
Rubyでの自前スクレイピングが高くつく理由
- IPブロック — GoogleはデータセンターのIPを数分でブロックします。ローテーションするレジデンシャルプロキシを借りることになります。
- CAPTCHA — 量によってトリガーされ、解くコストが積み重なります。
- ヘッドレスブラウザ — JSでレンダリングされる結果によってFerrum/Seleniumに追いやられ、遅く重くなります。
- Nokogiriの劣化 — Googleのマークアップが変化し、CSSセレクタが静かに
nilを返します。
安い方法: リクエスト1回
標準ライブラリのみ — gemなし:
require "net/http"
require "json"
uri = URI("https://api.serp.cheap/v1/search")
req = Net::HTTP::Post.new(uri, {
"X-API-Key" => ENV["SERP_CHEAP_API_KEY"],
"Content-Type" => "application/json",
})
req.body = { q: "best crm software", gl: "us" }.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
JSON.parse(res.body)["organic"].each do |r|
puts "#{r['position']}. #{r['title']}\n #{r['link']}"
end
プロキシも、ブラウザも、面倒を見るパーサーもありません。
または公式gemを使う
gem install serpcheap
require "serpcheap"
client = SerpCheap::Client.new(ENV["SERP_CHEAP_API_KEY"])
res = client.search(q: "best crm software", gl: "us")
puts res.organic.first.title
Railsを使っていますか? gem install serpcheap-rails がイニシャライザと設定を追加し、どこからでもクライアントを注入できるようにします。
料金
| 1クエリあたりの料金 | |
|---|---|
| フレッシュ結果 | $0.0006 |
| キャッシュ結果 | $0.0003 |
| 登録時の無料枠 | 100件の検索 |
従量課金は$0.75/1kから、クレジットは12か月間有効 — 自前のスクレイパーに必要なレジデンシャルプロキシよりも安いです。最も安いSERP APIの比較をご覧ください。
よく使うパラメータ
次のステップ
serp.cheapを試す
スニペットをコピーし、キーを追加すれば、RubyからGoogleをスクレイピングできます。登録時に100件の無料検索 — カード不要。以降は$0.75/1kからの従量課金で、クレジットは12か月間有効です。
- 無料APIキーを取得する →
- カード払いがお好みですか? serp.cheapはRapidAPI(約$0.90/1k)とApify(約$1.50/1k)でもご利用いただけます。