satewn-memo

だいたい技術っぽい雑記

Python3でWebスクレイピング・クローリング入門:基礎知識編

※もし間違っている部分がございましたら修正しますので、コメント等でお知らせ頂けると幸いです。

スクレイピングって、すごくワクワクする技術の割にそこまで取沙汰されていないような気がします。なので今回は、「なんかスクレイピング興味ある! やってみたい!」という方向けに、簡単な入門記事を基礎知識編・入門編に分けて書いてみることにしました。Pythonを選んだのは個人的にスクレイピングに向いてて書きやすいと思ったため(ライブラリも沢山ある)。

言葉の定義

そもそもスクレイピングって何ぞや? クローリングって言葉も聞くけどどう違うの? という部分について。

  • クローリング・・・Webサイトのリンクを辿り、その内容を収集すること
  • スクレイピング・・・収集されたデータ(HTMLなど)を解析、抽出、整形、再利用すること

例えば、ある特定のWebページから情報を抜き出してゴニョゴニョするのがスクレイピングです。一方であるドメイン全体や、不特定多数のWebページからどんどんリンクを辿っていくのがクローリングとなります。Googleなんかはスクレイピング・クローリングの親玉ですね。

環境について

Python向けのスクレイピング・クローリングのためのライブラリは数多くあり、単純な処理であればPython標準のモジュールでも対応できます。

ライブラリ名 用途
requests Webページの取得を行う。
BeautifulSoup HTMLを解析し、目的のデータを抽出できる。
Selenium フォームへの入力やクリックなど、ブラウザの操作を自動で行える。Javascriptレンダリングされているページでも対応できるのが強み。
Scrapy スクレイピングのためのフレームワーク。例えばrequestsとBeautifulSoupを組み合わせてやることをScrapyだけで行える。

Scrapyについて

Scrapyはここ最近人気上昇中のフレームワークです。情報も豊富で使い勝手も良さそうなのですが、ブラウザの自動操作は出来ません。 自動操作をしたい場合は、ScrapyとSelenuimを組み合わせて使う必要があります。

フレームワークであるScrapyを使うメリットをこちらから引用します。

Scrapyを使わなくても、Seleniumだけでもスクレイピングはできるんだけど、

  • 並行処理で複数ページをスクレイピングしてくれる(マルチスレッド?プロセス?)、
  • 何ページクロールしたかとか、エラーは何回起こったかとか、ログをいい感じにまとめてくれる、
  • クロール対象ページの重複を回避してくれる、
  • クロールの間隔とか、いろんな設定オプションを提供してくれる、
  • CSSXPathを組み合わせて、DOMから情報を抜ける(組み合わせが結構便利!)、
  • クロール結果を、JSONとかXMLで吐き出せる、
  • いい感じのプログラム設計でクローラーを書ける(下手に自分で設計するより良いと思う)、

など、思いつくScrapyを使うメリットはこんな感じ。

次回は実際にScrapyを使って簡単なスクレイピングチュートリアルを進めていきます。