Google 先生に聞いても意外とわからなかったウェブスクレイピング基礎編

Index

  1. はじめに
  2. スクレイピングとは何か?
  3. クローリング? API ?
  4. ウェブスクレイピングのメリット
    1. 個人用途
    2. ビジネス用途
  5. ウェブスクレイピングの前提となる知識
    1. DOM とは?
    2. CSS
    3. XPath
  6. 基本的なスクレイピングの流れ

はじめに

去年からチラチラ気になっていたウェブスクレイピングなるものについて、年末年始にまとまって調べることができました。
結論、Nokogiri, Scrapy, Goutte, などなど方法に特化した情報が多いため分からないことだらけでしたが、なんとかコーディング能力のない(プログラムを0から書いた経験無い)自分が勘所をつかむに至った情報だけを整理します。

スクレイピングとは何か?

ざっくりいうと、ウェブサイトにある情報のうち、欲しい部分だけを抽出する技術のことです。

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

クローリング? API ?

クローリングという単語が併せて紹介されていることが多いが、クローリングとは人が実際にウェブブラウザでウェブサイトを閲覧する行為を、プログラムを使って擬似的に再現する行為であり、スクレイピングをする上で必要となる手段の一つという位置付けです。
近年ではログイン行為のように人がブラウザで何か反応しないと目的のページに到達できない動的ページが増えているため、クローリングの重要性が増しています。
また、対比される技術として API (Application Programming Interface) があります。
情報を外から呼び出すための仕組みがそもそも用意されていれば、ウェブスクレイピングのようなある種力技(?)はそもそも不要です。

一応マナーがありますので、知らなかったで済まないこんな世の中を生き抜くために参照してください。

ウェブスクレイピングのメリット

個人用途

+いろいろなEコマースサイトから欲しい商品と価格情報を定期的に抽出し、比較検討の材料とする(価格コムがあればいらないですが・・・)
+広告が多くて辟易するサイトをスッキリ表示させる(Cleary というサービスが昔ありましたね)
+ローソンのおでんの価格一覧を取得する(楽しそうですね!)
Rubyでスクレイピングに挑戦してみた - コンパイラかく語りき

ビジネス用途

+いろいろな銀行の口座情報を一つのアプリから表示させるサービスを開発する(思い当たるサービスがいくつかありますが、以下の記事がどストライクです。FinTech市場拡大に向けて注視していくべきポイント――スクリーンスクレイピングの現状と今後の銀行によるAPI公開をめぐる課題 | 市場調査の矢野経済 ICTユニット
+ソーシャルメディア分析
+各種まとめサイトの自動運用

ウェブスクレイピングの前提となる知識

ウェブスクレイピングは HTLM (ふだんわれわれがブラウザで見ている情報の記述ルール)を利用します。
そのなかでも理解すべき情報は、DOM です。具体的には、CSS や XPATH です。

DOM とは?

DOM(Document Object Model)とは、文書の中の情報(見出し1、本文、URL リンク、etc.)をツリー構造のように持つことができるよね?という概念です。みなさんも文章を書くとき、目次を考えたり構成を考えたりしますよね?
DOMとは - JavaScript超初心者によるJavaScript入門講座

CSS

CSS(Cascading Style Sheets)とは、ウェブサイトの見た目をクールに整理するためのものです。DOM という概念のもと、文章の中身ではなく、スタイルを指定するものです。

XPath

DOM という概念を使って、実際に欲しい情報の場所を指定するための言語です。
「Body 配下の最初の Div タグの中の文章が欲しい」などの記述ができます。

基本的なスクレイピングの流れ

+欲しい情報がどの DOM (住所)にあるか確認する
+情報を取得する
+(必要なら)取得した情報を加工する
+なにがしかに出力する (text, json, etc.)

長くなってきたので講釈はここまでとのことで、次の記事に私が試行錯誤した実践編を書きたいと思います。