ジャバ・ザ・ハットリ

ベルリンのスタートアップで働くソフトウェアエンジニア

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

2015-03-09Ruby

Loading...

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
メディア: 大型本

関連記事


海外移住のQ&Aサイト シティーズ


海外移住向けのQ&Aサイトを運営しています。現在、海外にお住まいの方、これから海外移住や留学、転職をお考えの方はぜひご参加ください。 登録はもちろん無料です。

シティーズ https://www.cityz.jp/

cityz