shonen.hateblo.jp

やったこと,しらべたことを書く.

Ruby でスクレイピングするために Bash on Ubuntu on Windows に Nokogiri を導入した

タイトルで概要全部説明した.

スクレイピング(ウェブページから情報を抽出すること)に興味があったので, Ruby の gem の1つである Nokogiri を導入してみた.

インストール

Nokogiri の導入はとても簡単らしい.gemからinstallするだけ.

$ sudo gem install nokogiri

しかしパッケージ不足で失敗することがある. 例えば,次のようなログがあったら,パッケージ不足が原因でインストールが失敗している.

mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

ruby-devlibxml2libxml2-devなどが必要との事なので,これらをインストール.

$ sudo apt-get install ruby-dev libxml2 libxml2-dev

再度sudo gem install nokogiriを実行したらうまく行った.

実行

解説は次のサイトが詳しい.

morizyun.github.io

# encoding: utf-8

require 'open-uri'
require 'nokogiri'

url = 'https://ja.wikipedia.org/wiki/%E5%8A%A3%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%A9%E9%96%A2%E6%95%B0'

charset = nil
html = open(url) do |f|
    charset = f.charset # 文字種別を取得
    f.read
end

doc = Nokogiri::HTML.parse(html, nil, charset)

doc.xpath('//div[@id="content"]').each do |node|
    p node.css('h1').inner_text
    p node.xpath('//div[@id="mw-content-text"]').at('p').inner_text
end

実行結果(2017/09/11時点)

"劣モジュラ関数"
"数学の分野において劣モジュラ関数 (英: submodular function) とは集合関数の一種で、簡単にいうと、関数に渡される集合に1つ要素が加わった場合に増える関数の値が、も との集合が大きくなるにつれ小さくなるような関数を指す。集合関数であることを明示して劣モジュラ集合関数ということもある。劣モジュラ関数の概念は一般のベクトル値関数における凸関数の概念と類似した性質を持つため、近似アルゴリズムやゲーム理論、機械学習などの幅広い応用を持つ。"

jqueryっぽく要素が取り出せるのが面白いね.

関係ないけれど,text = open(url) {|io| io.read} の書き方は知らなかった….