ログインが必要なWebページをスクレイピングするならPython+Seleniumがオススメ

「Python」とWebテストツールとして有名な「Selenium」を使用して、

ログインが必要なWebページのスクレイピング・クローリングを行う手順を紹介します。

最近のログインが必要ページは「メールアドレス」、「パスワード」以外にも、

「Cookie」や「ハッシュ値」などの情報も裏ではログイン時に送っています。

アプローチ方法として「requests」ライブラリや「Scrapy」がありますが、

どちらも学習コストが高く簡単には使いこなせません。

そのため、初心者でも簡単に扱うことが出来る「Selenium」が大変オススメになります。

今回は「Selenium」の「Google Chrome」ドライバーを使用したWebページのスクレイピング・クローリングを行っていきます。

「Selenium」の扱い方については以下の記事にもまとめていますので参考にしてみてください。

あわせて読みたい
[Python]Seleniumのインストール方法とWebブラウザ操作の自動化 [初心者向け] Webテストツールとして有名な「Selenium」を使用して、Webブラウザ操作の自動化を行う手順を紹介します。 「Python」と組み合わせることでWebスクレイピングツールして...
目次

初心者がSeleniumを使う理由

requests」ライブラリは「Cookie」や「Header情報」など設定する必要があり、

初心者では実際にスクレイピング・クローリングまで実装できません。

「Seleninum」はブラウザを直接使ってWebスクレイピング・クローリングを行います。

ただし「Seleninum」は速度が少々遅いので、

より性能が求められる場合は「Scrapy」などを使用しましょう。

Seleniumのインストール

まずはSeleniumのインストールを行います。

pip」を使用してインストールします。

pip install selenium 

PyCharmを使用している場合は下の記事を参考にインストールしてみてください。

あわせて読みたい
PyCharmにライブラリをインストール・アップデートする手順 PyCharmで追加のライブラリを「Python Package Index」などリポジトリからインストールとアップデートする方法を紹介します。 Pythonでは便利なライブライが多数揃って...

これでSeleniumのインストールは完了です。

ドライバーの入手とインストール

次にドライバーの入手とインストールをします。

今回は「GoogleChrome用のドライバー」のダウンロード方法を紹介します。

「ダウンロードサイト:ChromeDriver – WebDriver for Chrome」にアクセスします。

「ChromeDriver」を選択しましょう。

Google

Latest Releseの「ChromeDriver」を選択します。

Google

各OSに合わせたドライバーをダウンロードしましょう。

Google

**Windowsは64Bit版だとしても、「chromedriver_win32.zip」を利用できます。

**下がメジャーブラウザのドライバーのダウンロードサイトになります。

ダウンロードしたメディアをOS上の所定の場所に配置します。

今回はメディアを下に配置します。

C:\webdriver\chromedriver.exe
Selenium用ドライバーのchromedriver.exeの配置先

ログインIDとパスワードを入力する要素を特定

「”Yahoo”ログインページ」にログインしてみたいとと思います。

初めにGoogleChromeでログインIDとパスワードを入力する要素にどんなセレクタが適用しているか確認します。

GoogleChromeで「https://login.yahoo.co.jp/config/login」で開きましょう

次にWindowsでは「F12」Macでは「Control + Option + I」で「検証モード」を開きます。

まずは「ログインID」を入力する「nputタグを調べてみましょう。

inputタグのidは「username」となっているのでこちらで指定しましょう。

次へ」buttonのidは「btnNext」ということが分かります。

パスワード」のinputタグは「passwd」ということが分かります。

ログイン」buttonのidは「btnSubmit」ということが分かります。

以上のようにそれぞれの要素をidで指定してPythonに操作させましょう。

id属性が無い場合にはclassなどでも特定することができます。

「selenium」でYahoo Japanにログインする

今回用意したサンプルコードは以下になります。 以下のコードを実行してみましょう。

# coding: UTF-8
from time import sleep
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys

if __name__ == '__main__':

# URL関連
url = https://login.yahoo.co.jp/config/login
login = ログインIDをここに入力
password = パスワードをここに入力

# ヘッドレスモードの設定。
# True => ブラウザを描写しない。
# False => ブラウザを描写する。
options = Options()
options.add_argument('--headless')

# Chromeを起動
driver = webdriver.Chrome(executable_path=C:\webdriver\chromedriver.exe, chrome_options=options)

# ログインページを開く
driver.get(url)

# ログオン処理
# ユーザー名入力
driver.find_element_by_id(username).send_keys(login)
driver.find_element_by_id('btnNext').send_keys(Keys.ENTER)

# ブラウザの描写が完了させるためにsleep
sleep(10)

# パスワード入力
driver.find_element_by_id(passwd).send_keys(password)
driver.find_element_by_id(btnSubmit).send_keys(Keys.ENTER)

# soupオブジェクトを作成
soup = BeautifulSoup(driver.page_source, lxml)

# ログイン後のトップページのソースを表示
print(soup)

# ドライバーをクローズ
driver.close()
driver.quit()

12行目と13行目でログインIDとパスワードを入力します。

29行目と36行目で事前に調べたinputタグのidに値を渡しています。

30行目と37行目で事前に調べたButtonタグのidに対してクリックしています。

よかったらシェアしてね!
  • URLをコピーしました!
目次