Python

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

2018年8月4日

こんにちは!土門大貴(daikidomon)です。

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

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

最近のログインが必要ページは「メールアドレス」、「パスワード」以外にも、「Cookie」や「ハッシュ値」などの情報も裏ではログイン時に送っています。

アプローチ方法として「requests」ライブラリや「Scrapy」がありますが、どちらも学習コストが高く簡単には使いこなせません。

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

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

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

[Python]Seleniumのインストール方法とWebブラウザ操作の自動化 [初心者向け]

こんにちは!土門大貴(daikidomon)です。 Webテストツールとして有名な「Selenium」を使用して、Web ...

続きを見る

初心者がSeleniumを使う理由

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

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

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

ただし「Seleninum」は速度が少々遅いので、より性能が求められる場合は「Scrapy」などを使用しましょう。

Seleniumのインストール

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

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

pip install selenium

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

PyCharmにライブラリをインストール・アップデートする手順

こんにちは!土門大貴(daikidomon)です。 PyCharmで追加のライブラリを「Python Package I ...

続きを見る

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

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

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

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

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

ChromeDriver」を選択しましょう。

Google ChromeのSelenium用ドライバーのダウンロードページ

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

Google ChromeのSelenium用ドライバーの最新版を選択

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

Google ChromeのSelenium用ドライバーの各OSのダウンロードページ

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に対してクリックしています。

関連記事

-Python

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.