勉強がてらnokogiriを使ってwebスクレイピングをやってみたので、頭の整理を兼ねて色々とメモしてみたφ(..)
Webスクレイピングとは
ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラーあるいはウェブ・スパイダーとも呼ばれる。 通常このようなソフトウェアプログラムは低レベルのHTTPを実装することで、もしくはウェブブラウザを埋め込むことによって、WWWのコンテンツを取得する。
ようするにWebページにアクセスして、HTMLを取得すること = Webスクレイピング webスクレイピングによって、Web上に掲載された特定の情報を素早く・扱いやすい形で取得することが出来ます。
例) 特定のジャンルのニュース記事のタイトル一覧を作成する等
nokogiriとは
Rubyを使ったWebスクレイピングでよく使われるgemがnokogiri
です。
nokogiri
を使うことによって簡単にhtmlを解析し、必要な情報を抽出することが出来ます。
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スクレイピングの流れは下記のように行っていきます。
open-uri
を使ってWebページにアクセスし、HTMLを取得Nokogiri::HTML.parse
を使って扱いやすいように変換css
、xpath
を使って必要な情報を抽出
今度は少し応用で、yahoo newsにアクセスしてトップニュースを取得してみましょう。 ちょっと試すだけだったら、paiza.ioが環境構築もいらないのでオススメです!
XpathとCSSセレクタ
nokogiri
を使ったWebスクレイピングでは、二種類の抽出方法が主に使われます。
Xpath
HTMLを'//div/p[@class="text"]'
というように要素の階層構造を指定し、抽出することが出来ます。
CSS
HTMLをjQueryで扱うように'div p.text'
という形で要素を抽出することができます。
教えてgoo!をスクレイピングしてみた
私は今回、教えてgoo!のスクレイピングツールを作ってみました(/・ω・)/
特定カテゴリの質問のタイトルと質問文、ベストアンサー、その他回答の一覧をjsonファイルで吐き出します。
おわりに
Webスクレイピングを使えば、必要な情報を素早く・扱いやすい形で取得できます。
画像の収集やニュースアプリの作成等、色々なことに使えるのではないかと思いましたφ(..)
私自身の学びの整理のために書きましたが、この記事がみなさんの学習の一助にも、なれば幸いです:D