スクレイピング scrAPI

2007/08/31

Webページから必要なデータだけを抽出して利用するスクレイピングが面白そう。
まずはscrAPIを使ってみました。

http://blog.labnotes.org/category/scrapi/

インストール

# gem install scrapi
Bulk updating Gem source index for: http://gems.rubyforge.org
Install required dependency tidy? [Yn]  Y
Successfully installed scrapi-1.2.0
Successfully installed tidy-1.1.2
Installing ri documentation for scrapi-1.2.0...
Installing ri documentation for tidy-1.1.2...
Installing RDoc documentation for scrapi-1.2.0...
Installing RDoc documentation for tidy-1.1.2...


リンク抽出をやってみる

せっかくなので、Railsでやってみます。
scrapingアプリケーションをつくり、generate。
$ rails scraping
$ cd scraping/
$ ruby script/generate controller Scraping index scrape

コントローラとビューを編集する。

コントローラ(scraping_controller.rb)
Webページのaタグからリンクを抽出して@linksにセット。とりあえずindex.rhtmlへ戻るようにした。
scrapeアクションがスクレイピング部分。スクレイピングの流れとしては、Scraper.defineして、scrape。もっと込み入ったことをするにはCheat Sheetを参考。
require 'rubygems'
require 'scrapi'
require 'open-uri'

class ScrapingController < ApplicationController

  def index
    @links = nil
  end

  def scrape
    links = Scraper.define do
      process("a[href]", "urls[]" => "@href")
      result :urls
    end
    @links = links.scrape(URI.parse(params[:url])).sort.uniq
    render :action => 'index'
  end
end

ビュー(index.rhtml)
URL入力用のテキストボックスと実行ボタンを配置。
実行結果を下に出すようにした。
<h1>Scraping#index</h1>
<%= start_form_tag(:action => 'scrape') %>
<%= text_field_tag('url', 'http://tech.x-neon.com/') %>
<%= submit_tag("ScrAPIでリンク抽出") %>
<% if @links != nil -%>
  <br /><hr />
  <% @links.each{|link| -%>
    <%= link_to(link, link) -%><br />
  <% } -%>
<% end -%>
<%= end_form_tag %>

scrapi

Ruby and Rails | コメント(0) | トラックバック(0)
トラックバック
トラックバックURL:
コメントをどうぞ
名前 (入力しなければ「通りすがり」):

メールアドレス (入力しても公開されません):

URL (入力すればリンクが張られます):


コメント:

(コメントにタグなどを使ってもタグがそのままが表示されます)