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 データ分析入門マニュアル - 実例を使ってWebスクレイピングからデータビジュアライゼーションまでやってみよう
〇 Pythonの環境構築でもう悩まない!初心者でも絶対にできるクラウドを使った環境構築方法!
■スクレイピング
〇 Python初心者が3カ月でWebスクレイピングができるようになるために必要な知識
〇 【Python】スクレイピング→データ収集→整形→分析までの流れを初心者向けにまとめておく ~Pythonに関するはてな記事を10年分スクレイピングし、Pythonトレンド分析を実際にやってみた~
■データビジュアライゼーション
〇 【Python初心者向け】データの取得・操作・結合・グラフ化をStep by Stepでやってみる - pandas, matplotlib -
■定期処理
〇 【Pythonで定期処理】 Cloud9を利用して、Seleniumでherokuから定期実行する
〇 Python データ分析入門マニュアル - 実例を使ってWebスクレイピングからデータビジュアライゼーションまでやってみよう
〇 Pythonの環境構築でもう悩まない!初心者でも絶対にできるクラウドを使った環境構築方法!
■スクレイピング
〇 Python初心者が3カ月でWebスクレイピングができるようになるために必要な知識
〇 【Python】スクレイピング→データ収集→整形→分析までの流れを初心者向けにまとめておく ~Pythonに関するはてな記事を10年分スクレイピングし、Pythonトレンド分析を実際にやってみた~
■データビジュアライゼーション
〇 【Python初心者向け】データの取得・操作・結合・グラフ化をStep by Stepでやってみる - pandas, matplotlib -
■定期処理
〇 【Pythonで定期処理】 Cloud9を利用して、Seleniumでherokuから定期実行する