子育て情報アプリを作れるように vol5 ~cookpadのクローラー~
今回は、
子育てと言えば、赤ちゃん!
赤ちゃんと言えば、離乳食!
ということで、
クックパッド(cook pad)のサイトから
料理の情報を取ってくるクローラーを作っていきます。
今回の目標
- cookpadから料理情報を取得する
1. cookpadから料理情報を取得する
前回、YouTubeのクローラーを作る時に
簡単に拡張できるように設計しましたので、
今回は簡単です。
まずは、cookpad用のクラスを作成します。
cookpad-site.rb
他にも料理サイトのクローラーを
作成するかもしれないなので継承元クラスも用意します。
cook-site.rb
次に、cookpadのクローラーを呼び出すための処理をmain.rbに追加します。
1 : # _*_ coding: utf-8 _*_ 2 : require 'capybara' 3 : require 'capybara/dsl' 4 : require 'selenium-webdriver' 5 : 6 : # Site 7 : require './main/site/site.rb' 8 : require './main/site/base/movie-site.rb' 9 : require './main/site/base/cook-site.rb' 10 : require './main/site/youtube-site.rb' 11 : require './main/site/cookpad-site.rb' 12 : 13 : # Capybaraの初期設定 14 : Capybara.current_driver = :selenium 15 : Capybara.default_wait_time = 10 16 : 17 : # ブラウザをGoogle Chromeに変更する 18 : # Capybara.register_driver :selenium do |app| 19 : # # http://code.google.com/p/chromedriver/downloads/list 20 : # # sudo mv ~/Downloads/chromedriver /usr/bin/ 21 : # Capybara::Selenium::Driver.new(app, :browser => :chrome) 22 : # end 23 : 24 : # ------------------------------------------------------- 25 : # クローリングするサイトを定義 26 : # ------------------------------------------------------- 27 : sites = [] 28 : sites << Site.new(YouTubeSite.new) 29 : sites << Site.new(CookpadSite.new) 30 : # sites << Site.new(YahooChiebukuroSite.new) 31 : # sites << Site.new(HatenaBlogSite.new) 32 : 33 : # ------------------------------------------------------- 34 : # 実行 35 : # ------------------------------------------------------- 36 : sites.each do |site| 37 : site.run 38 : end
修正はたった3行。
9行目
11行目
29行目
です。
最後にクローラーを作っていきます。
まずは、ソースコードを。
YouTubeのクローラーの時とやることは同じなのでコピペして、違うところだけ修正します。
(1) Step1 サイトを開く
visit(@base_url)
(2) Step2 検索ワードをセットする
今回はとりあえず離乳食
というキーワードで検索します。
find(:xpath, '//*[@id="keyword"]').set("離乳食")
(3) Step3 検索ボタンをクリックする
find(:xpath, '//*[@id="submit_button"]').click
(4) Step4 検索結果を絞り込む
cookpadでは有料会員のみ絞り込みが行えるようになっています。
なので、今回は絞り込みは行いません。
飛ばします。
(5) Step5 検索結果をソートする
ソートも有料会員のみなので、飛ばします。
(6) Step6 URLを取得する
all(:xpath, '//div[@id="main_content"]/div[@class="recipe-preview"]/div[@class="recipe-text"]/span[1]/a').each do |movie_element| urls << movie_element[:href] end
(7) Step7 動画情報を取得する
a. 最初に
visitメソッドを使ってurlのページを開きます。
b. url
事前に取得したurlをセットします。
c. title
@title = find(:xpath, '//*[@id="recipe-title"]/h1').text
d. description
@description = find(:xpath, '//*[@id="description"]/div[1]').text
e. tags
現在は何もセットしていません。
f. release_date
@release_date = find(:xpath, '//*[@id="published_date"]').text
g. thumbnail
@thumbnail = find(:xpath, '//*[@id="main-photo"]/img')[:src]
基本的にXPathを指定するだけで取得できました。
今回は簡単でしたね。
次回は、Yahoo知恵袋のクローラーを作っていきたいと思います。
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例
- 作者: るびきち,佐々木拓郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/08/25
- メディア: 大型本
- この商品を含むブログ (8件) を見る