0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ItayaAdvent Calendar 2022

Day 4

飲食店検索サイトの情報をとってきてみよう -食べログ編-

Last updated at Posted at 2022-12-03

概要

久々にスクレイピングで情報を取得するスクリプトを組みたくなったので組んで見る

言語

  • ruby

使うライブラリ

  • nokogiri
  • mechanize

nokogiriはHTMLをパースする上では欠かせない子です。
net/httpで簡単なスクレイピングはできるがリダイレクトとかが発生する場合に難しいのでそのへんを簡単にやってくれるmechanizeを採用しました。

本題

スクレイピングの基本は

  1. 通信内容の理解
  2. コードに落とし込む

以上である。

1. 通信内容の理解

通信内容の理解ということで、基本的にサイトを訪れてデベロッパーツールを開いてNetworkタブを開きます。
そこで検索時にどんな通信が行われているのかを見てみます。
スクリーンショット 2022-11-29 9.31.51.png
これがそうっぽいですね。

あとはこれをコードに落とし込むだけ

2. コードに落とし込む

ライブラリインストール

これをコードに落とし込むんですけど、まず最初に述べたライブラリを使うのでGemfileを作ってこんな感じに書きます。

source 'https://rubygems.org'

gem 'nokogiri'
gem 'mechanize'

必要なのはこの2つなのでこれを記載した上で

bundle install --path=.bundle

を実行
なんで--pathオプションをつけているかというとこれをつけないとグローバルに入っちゃってプロジェクトレベルの管理がしにくくなるからですね。

コーディング

これで準備ができたので実際のrubyのコードを書いてみましょう。

ファイル名は何でもいいのですが、crawler.rbとかにしましょうか

require 'uri'
require 'nokogiri'
require 'mechanize'
require 'kconv'

agent = Mechanize.new
area = '横浜'
keyword = 'たこ焼き'
page = agent.get("https://tabelog.com/rst/rstsearch/?LstKind=1&voluntary_search=1&lid=top_navi1&sa=%E5%A4%A7%E9%98%AA%E5%B8%82&sk=#{keyword}&vac_net=&search_date=2022%2F11%2F29%28%E7%81%AB%29&svd=20221129&svt=1900&svps=2&hfc=1&form_submit=&area_datatype=MajorMunicipal&area_id=27100&key_datatype=Genre3&key_id=40&sa_input=#{area}")

doc = Nokogiri::HTML.parse(page.body.toutf8, nil, 'utf-8')
puts '###ページタイトル取得###'
puts doc.title

puts "\n###検索ワード取得###"
puts doc.css('h2 strong').text


puts "\n###お店の名前を取得###"
doc.css('.list-rst__rst-name-target').map do |target|
  puts target.text
end

細かいコードの解説はこの記事ではしません。
実行結果はこんな感じになるかと思います。

###ページタイトル取得###
横浜市でおすすめの美味しいたこ焼きをご紹介! | 食べログ

###検索ワード取得###
横浜市のたこ焼きのお店

###お店の名前を取得###
串カツ田中 綱島店
お好み焼き さ介
お好み焼ポン吉 本店
築地銀だこ モザイクモール港北店
ごっつええ本舗 CIAL横浜
めりけんはとば
じゃんぼ総本店 ジャンボ酒場  綱島駅前店
元天ねぎ蛸 MARK IS みなとみらい店
ポッポ 立場店
梅鉢流まみい
tacobe
築地銀だこ ウィング上大岡店
築地銀だこ まるい食遊館戸塚店
ドルフィン
お好み焼き ころんぶす 石川町北口駅前店
銀だこ酒場 新横浜店
たこ焼一久
串カツ田中 横浜西口店
60Hz
ポッポ ららぽーと横浜店

「横浜」「たこ焼き」で検索した結果がこんな感じで取得できます。
なにかに使うことがあれば...

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?