Python

【Python×Selenium】超簡単にWebサイトをスクレイピングしてみる

今回は流行りのPythonを使って、Webサイトの情報をスクレイピングをしていきたいと思います。

環境設定

Seleniumというスクレイピング用のライブラリを使うための環境設定をしていきます。

また、プログラムを実行した環境は以下の通りです。

使用OS: MacOS Mojave

言語: Python3.6

Seleniumをインストールするには、ターミナルで以下のコマンドを入力します。

Seleniumのインストールが終わったら、

次はChromeDriverを以下のコマンドを入力してインストールします。

もし、この方法でインストールできない場合は、直接ホームページからダウンロードしてきましょう。

ホームページリンク: https://sites.google.com/a/chromium.org/chromedriver/

・ダウンロードするChromeDriverのバージョンを、Chromeのバージョンに応じて決めます。

・ChromeDriverを使用するOSを選択

スクレイピングをするPythonコード

環境設定が終わったので、早速コードを見ていきましょう。

今回はYahoo!知恵袋を使って検索結果をスクレイピングしていきます。

まずはコード全体から

どうでしょうか?

クラスなどの難しい概念は全く使っていないので、コード自体はすぐに理解できると思います。

Seleniumの基本的な使い方

Seleniumは、以下の4つのメソッドを基本として使います。

webdriver.Chrome()はクロームブラウザを立ち上げます。

get()で指定したURLに遷移、close()で1つのブラウザを閉じ、quit()で全てのブラウザを閉じる事ができます。

2~9行目

必要なモジュールをインポートして、定数を定義しています(Pythonには定数が存在しないので、慣習的に大文字と_を使って定数としています)。

定数の意味は以下のようになっています。

MAX_NUMBER: 取得するデータの数

SEARCH_QUERY: 検索するワード

SQRAPING_URL: スクレイピングするページのURL

16~21行目

16~21行目では、検索に関する処理を記述しています。

find_element_by_css_selector()はcssセレクターによってhtmlの要素オブジェクトを取得するメソッドです。

これで取得した要素オブジェクトを操作することによって、要素をクリックしたり、要素からテキストを取得したりすることができるようになります。

要素を取得することができるメソッドは他にもあり、以下のようなものがあります。

find_element_by_id() → IDで要素を取得

find_element_by_class_name() → クラスで要素を取得

find_element_by_name() → nameで要素を取得

find_elements_by_link_text() → link textで要素を取得

これらは該当する要素を1つ取得するメソッドですが、

該当する要素が複数ある場合には、

find_element_by_id()find_elements_by_id()

のように、elementを複数形にしてあげればいけます。

あとはfor文でオブジェクトを回すことで要素オブジェクトを取得することができます。

24~70行目

最初のwhile文では、Yahoo知恵袋の質問一覧のページに関するループを行なっています。

検索すると、1ページ目や2ページ目といったふうにページングされて検索結果が返ってきますよね。そのことです。

while文の中のfor文では、iページ目の検索結果に関するループを行なっています。

それぞれの質問に対し、『タイトル』『解決済みかどうか』『日付』をcontentという連想配列として取り出し、contentsという配列に追加しています。

また、ループの途中で取り出したいデータの個数が上限に達したら、breakでループを抜け出すようにしています。

プログラムの実行結果

上記のプログラムを使用して実際にスクレイピングしてみると、以下のような結果になります。

これは連想配列をそのままprint()で表示しただけなのですが、

実際にスクレピングをしてデータを扱いたい方は、これらのデータを整形してCSV形式などで出力するといいでしょう。

まとめ

今回はPythonでSeleniumというライブラリを使ってWebサイトのスクレイピングをしてみましたが、いかがだったでしょうか?

Python自体、エンジニアでない人でも簡単に使うことのできる作りになっているので、

難しいプログラミング技術がなくても簡単にコードを書く事ができたかと思います。

またSeleniumというライブラリのおかげで、

スクレイピング自体もかなり簡単にできるようになったので、これからもどんどん情報を収集していきましょう!

最後まで読んでいただきありがとうございました。