概要
久々にスクレイピングで情報を取得するスクリプトを組みたくなったので組む
言語
- ruby
使うライブラリ
- nokogiri
- selenium-webdriver
nokogiriはHTMLをパースする上では欠かせない子です。
GoogleMapはJSゴリゴリに動いていて通信取得が厳しいのでseleniumをつかいます。
本題
seleniumの準備に関しては今回はしてあるものとして話をすすめます。
これで準備ができたので実際のrubyのコードを書いてみましょう。
ファイル名は何でもいいのですが、crawler.rbとかにしましょうか
require 'net/http'
require 'uri'
require 'nokogiri'
require 'kconv'
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
area = '横浜'
keyword = 'たこ焼き'
driver.navigate.to "https://www.google.co.jp/maps/search/#{area}+#{keyword}/"
html = driver.page_source
driver.quit
doc = Nokogiri::HTML.parse(html.toutf8, nil, 'utf-8')
puts '###ページタイトル取得###'
puts doc.title
puts "\n###お店の名前を取得###"
doc.css('.NrDZNb div').map do |target|
puts target.text
end
細かいコードの解説はこの記事ではしません。
実行結果はこんな感じになるかと思います。
###ページタイトル取得###
横浜 たこ焼き - Google マップ
###お店の名前を取得###
ごっつええ本舗 CIAL横浜
たこ焼きバル くるり 横浜
たこやきバル tacobe
浜のたこ焼きタコリーナ
元天ねぎ蛸 みなとみらい店
「横浜」「たこ焼き」で検索した結果がこんな感じで取得できます。
ただ、スクロールとかさせないと他の取れなかったり、要素的にも不安定な気がするので実際に使う予定があるのであればAPI使うのがいい気がしました...