Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby:nokogiriを使ったWebスクレイピングの基礎・入門

勉強がてらnokogiriを使ってwebスクレイピングをやってみたので、頭の整理を兼ねて色々とメモしてみたφ(..)

Webスクレイピングとは

ウェブスクレイピング - Wikipedia

ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラーあるいはウェブ・スパイダーとも呼ばれる。 通常このようなソフトウェアプログラムは低レベルのHTTPを実装することで、もしくはウェブブラウザを埋め込むことによって、WWWのコンテンツを取得する。

ようするにWebページにアクセスして、HTMLを取得すること = Webスクレイピング webスクレイピングによって、Web上に掲載された特定の情報を素早く・扱いやすい形で取得することが出来ます。

例) 特定のジャンルのニュース記事のタイトル一覧を作成する等

nokogiriとは

Rubyを使ったWebスクレイピングでよく使われるgemがnokogiriです。
nokogiriを使うことによって簡単にhtmlを解析し、必要な情報を抽出することが出来ます。

github.com

morizyun.github.io

Webスクレイピングをやってみる

nokogiriを使ったwebスクレイピングの練習として、yahoo newsにアクセスしタイトルを取得してみたいと思います。

# ==================
# gemの読み込み
# ==================
require 'nokogiri'
require 'open-uri'

# ==================
# 定数宣言
# ==================
URL = "https://news.yahoo.co.jp/"

# ==================
# スクレイピング処理
# ==================

# 変数宣言
charset = nil
# webページにアクセスし、HTMLを取得
html = open(URL) do |f|
  charset = f.charset # 文字種別を取得
  f.read              # htmlを読み込んで変数htmlに渡す
end

# nokogiriで扱えるように取得したHTMLを変換
doc = Nokogiri::HTML.parse(html, nil, charset)

# 取得したHTMLのタイトルを表示
p doc.title

nokogiriを使ったWebスクレイピングの流れは下記のように行っていきます。

  1. open-uriを使ってWebページにアクセスし、HTMLを取得
  2. Nokogiri::HTML.parseを使って扱いやすいように変換
  3. cssxpathを使って必要な情報を抽出

今度は少し応用で、yahoo newsにアクセスしてトップニュースを取得してみましょう。 ちょっと試すだけだったら、paiza.ioが環境構築もいらないのでオススメです!

XpathCSSセレクタ

nokogiriを使ったWebスクレイピングでは、二種類の抽出方法が主に使われます。

Xpath

HTMLを'//div/p[@class="text"]'というように要素の階層構造を指定し、抽出することが出来ます。

qiita.com

CSS

HTMLをjQueryで扱うように'div p.text'という形で要素を抽出することができます。

www.qoosky.io

教えてgoo!をスクレイピングしてみた

私は今回、教えてgoo!のスクレイピングツールを作ってみました(/・ω・)/
特定カテゴリの質問のタイトルと質問文、ベストアンサー、その他回答の一覧をjsonファイルで吐き出します。

おわりに

Webスクレイピングを使えば、必要な情報を素早く・扱いやすい形で取得できます。
画像の収集やニュースアプリの作成等、色々なことに使えるのではないかと思いましたφ(..)
私自身の学びの整理のために書きましたが、この記事がみなさんの学習の一助にも、なれば幸いです:D