ジャバ・ザ・ハットリ
Published on

Rubyでクローラーを作る その1

Authors
  • avatar
    ジャバ・ザ・ハットリ

Ruby でクローラーを作りましたので、その方法の解説。

まずウェブサイトを巡回してデータ集めるプログラムのことをクローラーと言ったり、スクレイパーと言ったりしますがその定義は以下。

  • クローラー:ウェブサイトを巡回的にまわってデータを集める。ページ内にあるリンクをたどって、階層構造のウェブサイト郡にあるデータを集めてまわる。
  • スクレイパー:ウェブページの HTML データを解析、収集するプログラム。基本的には1つのウェブページを対象にする。

ということで、今回作ったのはクローラー。

クローラー関連のプログラムは Github なんかにはほとんどソースコードがアップ されていない。理由は他人のウェブサイトを巡回してデータ取ってくるプログラムに何か変な細工してて、公開できないんじゃないですかね?

Nokogiri

Nokogiri を入れればひと通りのスクレイピングは可能になる。ただし主にウェブサイトの静的な表現に限る。まずは Nokogiri でターゲットのウェブサイトのスクレイピングを実施して、できない箇所をその2以降で解説する方法を採るってのが王道。

ヤフーニュースサイト(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

これを保存したファイルを nokogiri_text.rb とする。

$ ruby nokogiri\_text.rb

を実行すると

5人刺殺 ネットで住民を中傷?写真new
和解には過去直視を 独首相写真
財政的に「戦争できぬ」日本写真
あまりに不快 起床装置が人気写真
ゲーム改造 PARが生産終了写真new
ガッツポーズ禁止 英明野球部写真new
ロンギヌスに38日で3538万円写真
斎藤工「anan」で濃厚キス写真

のような結果がターミナルに出ます。しかしロクなニュースないな。

解説

まずは Nokogiri を入れる

$ sudo gem install nokogiri

url の中にクロールしたいウェブサイトのアドレスを入れる。
url = "http://news.yahoo.co.jp/"

ポイントはここ。
puts doc.at_css(top_news_css).text
取りたい情報の CSS をカッコ内に入れてテキスト化した内容を puts している。
top_news_css トップ8件のニュースのヘッドラインに相当する CSS 要素が入ります。

CSS 要素の調べ方

ここに Safari を使ってアクセス。
SelectorGadget: point and click CSS selectors

真ん中あたりにある青文字の SelectorGadget をブックバックバーまでひっぱって貼り付ける。

image

クローラーターゲットのウェブサイトにアクセスする。例えばヤフーニュース
先ほど貼り付けた SelectorGadget のブックマークバーを押すと画面下部に部品が表示される。

image

取りたい要素をクリックして黄色にする。要らない要素をクリックして赤で除く。
もうこれは文章で解説するより、触ってもらった方が理解が早いです。要るのをクリックして黄色、要らんのをクリックして赤!

で下部に表示された CSS 要素をソースコードに貼り付け。
例で言えば
li:nth-child(1) div
が1つ目のヘッドライン。
2つ目は
li:nth-child(2) div
となります。

後は実行あるのみ。なんか説明が雑かな?もし分からない記述とかあればコメントください。

とは言ってもこのようなググって出てくる情報を元にコーディングしてると、その場しのぎの泥縄解決式コードになりがち。体系的に Ruby によるクローラー技術を習得するのであればこの本が最適。

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例
Ruby によるクローラー開発技法 巡回・解析機能の実装と 21 の運用例
作者: るびきち,佐々木拓郎
出版社/メーカー: SB クリエイティブ
発売日: 2014/08/25
メディア: 大型本

関連記事