zashii-1434

Stats of My Life(おいしい人生を味わうために、コツコツとチャレンジしたことを書くブログ)

Ruby on Rails Topic1 クローリング基礎編

Rubyでクローリングをしてみました。
学んだことを備忘として記載します。

1.クローリングとは?

ウェブサイトを巡回的にまわってデータを集めることを言います。また、集めたデータを解析して整理・加工することをスクレイピングと言います。

2.Nokogiriを準備

NokogiriはRubyのライブラリです。 HTMLやXMLの構造を解析して、特定の要素を指定しやすい形に加工できます。
インストール方法は以下の記事を参考に作成してみて下さい。

morizyun.github.io


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

実行結果は、次のように表示されます。
f:id:hideki5793:20150808123239p:plain


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というツールを使いました。

http://selectorgadget.com

使い方は、サイトを開いて青字のSelectorGadgetをドラッグしてツールバーのところまで
もって行って下さい。

f:id:hideki5793:20150808123251p:plain

あとはyahooトップページを開いて、ツールバーをクリックするとselectogadgetが起動します。
yahooの記事をクリックすると画面したに要素が表示されます。

f:id:hideki5793:20150808123248p:plain

ちょっとわかりにくいかもですが、今回は記事を取得したいので取得したいCSSは緑色に
そうでないものは赤色にします。

するとyahooの画面下にli:nth-childが表示されました。8つの記事を全部選択していないですが
かっこ内に数字が振られているので、li:nth-childは8つまで付いていることが予測できます。
f:id:hideki5793:20150808123244p:plain


基礎編ではありますが、まずはウェブサイトの特定情報を取得する、ということをやってみました。