読者です 読者をやめる 読者になる 読者になる

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を使って簡単なスクレイピングチュートリアルをやってみる。