Rubyでクローリングをしてみました。
学んだことを備忘として記載します。
1.クローリングとは?
ウェブサイトを巡回的にまわってデータを集めることを言います。また、集めたデータを解析して整理・加工することをスクレイピングと言います。
2.Nokogiriを準備
NokogiriはRubyのライブラリです。 HTMLやXMLの構造を解析して、特定の要素を指定しやすい形に加工できます。
インストール方法は以下の記事を参考に作成してみて下さい。
3.ソースサンプル
ヤフーニュースサイト(http://news.yahoo.co.jp/)のトップニュースのヘッドラインを
取ってきて表示するサンプルです。
require 'rubygems' require 'nokogiri' require 'open-uri' url = "http://news.yahoo.co.jp/" doc = Nokogiri::HTML(open(url)) for i in 1..8 do top_news_css = "li:nth-child(" + i.to_s + ") div" puts doc.at_css(top_news_css).text end
実行結果は、次のように表示されます。
4.ソースの解説
url = "http://news.yahoo.co.jp/" doc = Nokogiri::HTML(open(url))
ここではyahooのトップページ情報をdocに入れています。
for i in 1..8 do top_news_css = "li:nth-child(" + i.to_s + ") div" puts doc.at_css(top_news_css).text end
ここではまず、変数top_news_cssにli:nth-child(1) divを入れています。
そしてdoc.at_css(top_news_css)では一致するcssの情報を取得してテキスト化した後、
putsしています。
li:nth-child(8) divまで8回繰り返し処理をしています。
li:nth-childの要素はどうやってわかったのか?ですが
selectogadgetというツールを使いました。
使い方は、サイトを開いて青字のSelectorGadgetをドラッグしてツールバーのところまで
もって行って下さい。
あとはyahooトップページを開いて、ツールバーをクリックするとselectogadgetが起動します。
yahooの記事をクリックすると画面したに要素が表示されます。
ちょっとわかりにくいかもですが、今回は記事を取得したいので取得したいCSSは緑色に
そうでないものは赤色にします。
するとyahooの画面下にli:nth-childが表示されました。8つの記事を全部選択していないですが
かっこ内に数字が振られているので、li:nth-childは8つまで付いていることが予測できます。
基礎編ではありますが、まずはウェブサイトの特定情報を取得する、ということをやってみました。