子育て情報アプリを作れるように vol5 ~cookpadのクローラー~

今回は、
子育てと言えば、赤ちゃん!
赤ちゃんと言えば、離乳食!
ということで、
クックパッド(cook pad)のサイトから
料理の情報を取ってくるクローラーを作っていきます。

今回の目標

  1. 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の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例