ゆるふわ.rb in 大洲 〜やってみようスクレイピング〜 を開催しました

11/2(日) にゆるふわ.rb を開催しました。
今回のテーマは「スクレイピング」で、説明を兼ねた私のライブコーディング後に参加者のみなさんにも実際に手を動かしてもらいました。
ゆるふわ.rb in 大洲 〜やってみようスクレイピング〜 - ゆるふわ.rb | Doorkeeper

まずは自己紹介から

はじめに参加者のみなさんに簡単に自己紹介してもらいました。
今回初めて来られた方もいて、まだまだゆるふわ.rb の多様性も広げていけるな〜という可能性を感じました。
また、意外だったのは「スクレイピング」というテーマに惹かれて来ましたという方が複数人いたことで、面白くて参加したくなるようなテーマをこれからも考えていきたいと思いました。

スクレイピングの説明&ライブコーディング

次に私から参加者のみなさんへ、簡単にスクレイピングの説明をしてライブコーディングに入りました。
ライブコーディングは irb で、まずは open-uri を使ってサイトの情報を取得してみました。
open-uri は Kernel.open を再定義してくれるもので、open("http://xxx") という形式でサイト情報を取得できるようにしてくれます。(スクレイピング対象はHeartRails のサイトにしました。)

irb> require 'open-uri'
irb> url = "http://www.heartrails.com"
irb> hr = open(url)
irb> hr.each_line do |l|
irb>   p l
irb> end

このコードを実行すると、対象サイトの HTML が出力されます。(スクレイピングの入り口ですね)
次に「ではタイトルを取ってみましょう」ということでコーディングしてみました。

irb> require 'open-uri'
irb> url = "http://www.heartrails.com"
irb> hr = open(url)
irb> hr.each_line do |l|
irb>   if l.include?("<title>")
irb>     start_index = l.index("<title>") + "<title>".length
irb>     end_index = l.index("</title>")
irb>     p l[start_index...end_index]
irb>   end
irb> end
# => "HeartRails | ハートレイルズ | ザ・ウェブサービス・カンパニー"

<title> ディレクティブで検索して、見つかったらその中身のデータを出力するようなプログラムになっています。
まぁこれでも OK なんですが、ちょっと <title> の中身を取るところの処理が長いですね。。。

そこで次は nokogiri を使ってもっと簡単にしてみました。
nokogiri は HTML/XML パーサーで、Nokogiri::HTML(open("http://xxx/")) という形式でサイト情報をパースしてくれます。

irb> require 'nokogiri'
irb> hr = open(url)
irb> noko_hr = Nokogiri::HTML(hr)
irb> noko_hr.methods.grep /title/
# => [:title, :title=]

irb> noko_hr.title
# =>"HeartRails | ハートレイルズ | ザ・ウェブサービス・カンパニー"

nokogiri を利用するとすでにタイトル部分はパースされているため、noko_hr.title とするだけでタイトルが取得できます。
利用しない場合に比べるとずいぶんシンプルなプログラムになりました。

スクレイピングしながらビアバッシュ

続いて参加者のみなさんにスクレイピングにチャレンジしてもらいました。
やってもらったのは HeartRails のサイト内の Services のリンク(<a href=...> の部分)とサービス名を表示するというもの。

みなさんあまりおしゃべりもせず結構真剣に挑戦されていました。
その光景を見て「ゆるふわ.rb っぽく無いな〜」と思って笑ってしまいました(笑)

今回は参加いただいた越智さんのつながりで、ボノ株式会社さんと Skype でつないで交流を深めるという新しい試みも実践しました。
残念ながら Skype では刺身は送れないので、しっかり見せびらかしながら食しましたよ(笑)
ボノ株式会社|Bono Inc.

今回の交流ですっかり仲良しになりました

ちょっと写真では分かりづらいんですが、後ろに写っているオフィスは倉庫を DIY したそうです!
次はキッチンを導入予定らしく、もしキッチンが出来たら出張ゆるふわ.rb で魚のさばき方勉強会リターンズなんてのをさせてもらったら面白いかも?なんて勝手に思ってたりします(笑)

見せびらかしたアジ刺し、タイ刺し、ふぐしゃぶ

まとめ

今回久しぶりにゆるふわ.rb を開催しましたが、何人もの方にこうやって田舎まで足を運んでもらえることは本当にありがたいなと改めて思いました。
これからもこういう人とのつながりを大事にしつつ、面白いテーマでみんなでワイワイ ruby を楽しめる場を提供していけたらと思います。
参加いただいたみなさん、ありがとうございました。