Pythonスクレイピング

Posted on 2018/12/29

TOC

はじめに

Pythonによるスクレイピングの情報を以下にまとめる。

環境

  • MacOS Mojave 10.14.1
  • Homebrew 1.8.4(インストール済み Rubyインストールの記事参照)
  • pyenv
  • Python 3.7.1
  • selenium 3.141.0
  • 記載開始日 2018/12/11

スクレイピング方法

Pythonでは以下の選択肢がある。

  • Requesstライブラリを用いたHTTPプロトコルによる操作。
  • Selenium+WebDriverを用いたブラウザ操作(RESTfulAPIを用いてブラウザ操作をする)WebDriverには以下のような選択肢がある。ChromeDriverが無難。
    • ChromeDriver。Chromeを操作できる
    • PhantomJSライブラリ。こちらはブラウザを立ち上げない。Seleniumで使用するのは現在非推奨(PhantomJSはWebKit(レンダリングエンジン)ベースのブラウザ。WebkitはApple主導でSafariなどに使用されている)
    • 上記以外のライブラリもあり。詳細はこちらを参照

ChromeDriver

今回はこちらを選択。選定理由はセッション管理が容易な点と画面操作によりファイルをダウンロードが容易な点。

ChromeDriverをダウンロードし、パスを通せば使えるようになる。使い方の詳細はこちら

ファイル保存のサンプルはこちら

DOM要素コントロールはこちら

Parser

HTMLのParserは3つある。

こちらが参考になる。

以下のような形でパースする。最もメジャーものはBeautifulSoup。

※パースは「HTML文法に基づき意味や構造を解釈すること

soup = BeautifulSoup(res.text, "html.parser")

BeautifulSoup

PythonのParserとしてよく使用されるHTML構文解析ライブラリ。ChromeDriverにより画面を操作した後、要素抽出などで使用する。

使い方についてはこちらの説明がわかりやすかった。

リファレンスはこちら→http://kondou.com/BS4/

BeautifulSoupだと画面操作はできないので、画面操作はDriver、要素の取得等はBeautifulSoupといった形で使い分けが必要。

XPathの確認方法

XPathの取得はChromeのデベロッパーツールが便利。手順は以下の通り。

  • Chromeで対象のWebサイトを開き、エレメントを右クリック→検証
  • デベロッパーツールが開くので該当要素を右クリック→Copy→Copy XPath
  • クリップボードにコピーされるため、貼り付ければOKです

参考

  • requests: HTTPライブラリ。今回はRequest送信やSession維持に使用
  • BeautifulSoup: HTML構文解析のライブラリ。