2017-10-07

【Python】Webスクレイピングチュートリアル -ログインが必要なサイトの場合-



PythonのSeleniumを利用して、ログインが必要なサイトにアクセスし、データを取得する方法を解説します。

目次


  • はてなブックマークにログインしてみる
  • ログインページに移動する
  • ログインページのフォームのid, class, もしくはxpathを取得
  • データの挿入
  • フォームの送信
  • ログイン移動確認


はてなブックマークにログインしてみる

まず、はてなブックマークのログインページにアクセスしますと、このような画面になっています。



処理の流れとしては、こちらに

  • 自分のメールアドレスを入力
  • パスワードを入力
  • 送信ボタンをクリックする

というのを、Webスクレイピングで実行します。さらにログイン後自分のプロフィールアドレスに行き、自分のアカウント情報が取得できるかどうか確認します。
もしログインしていない状態で、そのページに行くと、ログインページに移動されます。ちゃんとログインできていると、プロフィールページに移動されます。それでは、実際にやってみましょう。


ログインページに移動する::browser.get(url)


まず最初に、seleniumをimportします。

from selenium import webdriver

次に、webdriverという仮想のブラウザを呼び出します。
browser = webdriver.PhantomJS()
ログイン先のURLをセットします。

loginUrl= "https://www.hatena.ne.jp/login"
 そして、そのページにWebdriverをアクセスさせます。

browser.get(loginUrl)

次に、自分のメールアドレスと、パスワードを入力します。

username = "あなたのメールアドレス"
password = "あなたのパスワード"

ログインページのフォームのid, class, もしくはxpathを取得::find_element_by_xpath()


で、今度はそのユーザー名と、パスワードを入力するところを指定する必要があるので、再度ログインページへアクセスし、F12ボタンを押します。そうするとこんな画面になると思います。




あとは、下のGIFのように、各値のclass、もしくはidを取得するか、xpathを取得してください。今回の場合は、xpathを取得します。



取得したユーザー名のXpathは、//*[@id='login-name']だったので、このように場所を指定してあげます。

userNameField = browser.find_element_by_xpath("//*[@id='login-name']")

データの挿入::send_keys()


そして、そのuserNameFieldに、usernameを入れてあげます。

userFameField.send_keys(username) 

同様にパスワードもですね。

passwordField = browser.find_element_by_xpath("//*[@id='container']/div/form/div/div[2]/div/input")
passwordField.send_keys(password)

フォームの送信::click()


これで値が入るので、「送信する」ボタンのXpathを取得します。

submitButton = browser.find_element_by_class_name("submit-button")
submitButton.click()

ログイン移動確認::browser.title


これで、ログインが完了されるはずです。ログインが完了されていれば、プロフィールページに移動すると、自分のユーザー名が表示されたページに移動するはずです。

profile = "profile.hatena.ne.jp"
browser.get(profile)
そして、このページのタイトルを表示します。
browser.title

これで自分のユーザー名が入ったページが表示されれば、成功です。おめでとうございます!最終的には、以下のようなコードとなります。

from selenium import webdriver
browser = webdriver.PhantomJS()

loginUrl= "https://www.hatena.ne.jp/login"
browser.get(loginUrl)

username = "あなたのメールアドレス"
password = "あなたのパスワード"

userNameField = browser.find_element_by_xpath("//*[@id='login-name']")
userFameField.send_keys(username)

passwordField = browser.find_element_by_xpath("//*[@id='container']/div/form/div/div[2]/div/input")
passwordField.send_keys(password)

submitButton = browser.find_element_by_class_name("submit-button")
submitButton.click()

profile = "profile.hatena.ne.jp"
browser.get(profile)

browser.title

最後に

ここまでで、よくわからなかった場合は、以下のチュートリアルにそって進めてみてくださいね!


Python データ分析入門マニュアル - 実例を使ってWebスクレイピングからデータビジュアライゼーションまでやってみよう -

Python データアナリティクス入門マニュアル Webスクレイピングを、プログラミングを学んだことのない人向けに0から解説するマニュアルです。何から学ぶべきか、環境構築はどうするかからはじまって、Webスクレイピング、データの前処理、そしてデータビジュアライゼーションまでを丁寧に解説します。 ...

また、PythonのSeleniumのドキュメンテーションには、さらに便利なメソッドが存在するので、見てみてくださいね!


Selenium with Python - Selenium Python Bindings 2 documentation

This is not an official documentation. If you would like to contribute to this documentation, you can fork this project in Github and send pull requests. You can also send your feedback to my email: baiju.m.mail AT gmail DOT com. So far around 40 community members have contributed to this project (See the closed pull requests).

Python データ分析入門マニュアルに戻る

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...