Python仕事術

Pythonでwebスクレイピング(要素の取得と操作方法まとめ)

Seleniumでwebスクレイピングする際に知っておきたいメソッドとそれらの使い方を紹介します。

皆さんがインターネットを使っている際に行っている動作は基本的に

  • マウスの(左)クリック
  • キーボード入力
  • プルダウンの選択
  • ブラウザバック

と問意外に少ないかと思います。

Pythonライブラリ「Selenium」を使えばこれらの作業を自動化することができます。

本記事では、Seleniumでこれらの操作をする際に使用するメソッドの紹介と使い方についてまとめてみました。

また、実際に

  • 文字の取り込み(サイト上の文書の取り込み)
  • 画像収集(サイト上の画像の取り込み)

といった作業をSeleniumで行う際のコードについても紹介しております。

Webスクレイピングによる情報の収集自体には違法性がないとされておりますが、 著作権を侵害する使い方や、過度なアクセスによるサーバへの負荷といった問題をはらんでおります。Webサイト側の利用規約の確認や過度なアクセスにならないように考慮したシステム作りをし、自己責任のもとでWebスクレイピングを活用していきましょう。

目次
  1. 必要なドライバ、ライブラリのインストールとインポート
  2. 要素の取得
  3. クリック
  4. 文字入力
  5. ブラウザバック
  6. 文字の取り込み
  7. 画像の取り込み
  8. プルダウンの選択
  9. ブラウザを閉じる

必要なドライバ、ライブラリのインストールとインポート

・Google Colaboratoryの場合のドライバ、ライブラリのインストールとインポート及びブラウザの起動

Google Colaboratoryでのwebスクレイピングについては、以前に書いた別記事で基本的なやり方を解説しております。そのため、今回はコードのみの紹介とします。

詳しく知りたい方は別記事「Google Colaboratoryでwebスクレイピング」をご覧ください。

下記コードでドライバ、モジュールのインストールおよび使用するモジュール等のインポート が完了し、ヘッドレスモードでGoogleChoromeが起動している状態になります。

・JupyterLabでのドライバ、モジュールのインストールとインポート

JupyterLabでwebスクレイピングするためには

  • seleniumのインストール
  • chromedriverのダウンロード

が必要になります。

seleniumのインストールについては、JupyterLabで下記コードを執行すれば終わります。

chromedriverのダウンロードについては、ブラウザで「chromedriver.exe」と検索すれば ダウンロードサイトを見つけることができます。

ダウンロードサイトを見るといろいろなバージョンのchromedriverをダウンロードすることができます。今使っているGoogle Chromeのバージョンにあったドライバーをダウンロードしましょう。

seleniumのインストールとchromedriverのダウンロードが終わりましたらモジュール等のインポートを行い、GoogleChoromeを起動します。

・目的とするサイトへ遷移

ブラウザを開くまではGoogle ColaboratoryとJupyterLabでコードが違いましたがここから先は同一になります。

下記コードで目的サイトへ遷移することができます。今回は本ブログ(キム日記)にアクセスしてみましょう。

➋要素の取得

サイト上で何かアクション(クリックや文字入力)をする際、どの部分にアクションをしていくのか定義する必要があります。その場所の情報を入手することを本記事では 「要素の取得」と表しています。

今回はXpathから要素を取得していきたいと思います。

目的の要素を取得するためには、サイト内にある取得したい情報をHTML(サイトを構成しているプログラム) から探し出し、そのXPathをwebスクレイピングのプログラムに組み込まなければなりません。

XPathの出し方をしたの画像にて解説します。

  1. キーボードのF12キーを押すと右にサイトを構成するHTMLが出る。
  2. クリックするとページ内の要素を確認できるようになる。
  3. 確認したい要素をクリック
  4. 要素のHTML構成箇所を確認
  5. 右クリック
  6. 「Copy」から「Copy XPath」をクリック

これで任意の部分のXPathを取得できます。

find_elementメソッドの引数「value」に任意のXpathを入れれば要素を取得することができます。

任意の変数名=browser.find_element(by=By.XPATH, value=’取得したい要素のXpath’)

下記コードで変数「inquiry_form」に当ブログの「問い合わせフォーム」アイコンの要素を格納することができます。

❸クリック

取得した要素をクリックするにはclickメソッドを使用します。

クリックしたい要素.click()

下記コードで当ブログの問い合わせフォームのアイコンをクリックして 問い合わせフォームのページに遷移することができます。

❹文字入力

文字の入力を行うにはsend keysメソッドを使います。

入力したい箇所の要素.send_keys(‘入力内容’)

下記コードでは問い合わせフォームの氏名の欄に「明日から頑張る人」と入力できます。もともと入力されている内容があると望んだ動きをしない可能性があるためclearメソッド で要素内の入力内容を全消ししてから、文字入力するコードを実行すると良いでしょう。

❺ブラウザバック

ブラウザバックするにはbackメソッドを使います。

下記コードでブラウザバックすることができます。

❻文字の取り込み

テキストの要素をfind elementメソッドで取得した場合、要素内には取得したテキスト情報が入っています。しかし、普通に要素内のテキストをprint関数で表示しようとすると望んだ表示がされないかと思います。

そういう時は、後ろに「.text」を入れることで要素内のテキストのみを抽出することができます。

❼画像の取り込み

画像の取得についてはRequestsモジュールも使っていきます。 プログラムの流れとしては

  • ①画像の要素を取得
  • ②画像のURLを取得
  • ③画像URLからバイナリ読み込む
  • ④バイナリデータを画像データで書き出す

となります。

❽プルダウンの選択

プルダウンから選択する場合にはSelectモジュールのselect byメソッドを使用します。

select byメソッドには3種類ありますが、その中で今回は

  • 選択したい値でを指定するメソッド(select by valueメソッド)
  • 選択したい値のインデックス番号でを指定するメソッド(select by indexメソッド)

を紹介します。

❾ブラウザを閉じる

ブラウザを閉じるにはquitメソッドを使います。