はじめに
こんにちは!
最近一人暮らしをしてバタバタしている新垣です!
業務でPythonを使用していた時期があり、趣味レベルでもPythonを使ってみたいなと思いました。
なにかできないかなと思い、そういえばPythonってスクレイピングする言語として有名だったなと思い、最近触り始めました。今回Pythonのスクレイピング初心者が実際に触ってみて、便利だと思った所について書ければ良いかなと思い今回のブログを投稿させていただきます。
筆者について
高校・大学でプログラミングをかじり、2021年4月にmiracleaveに入社した新卒2期生です。
スクレイピングとは
スクレイピングとは、WebページやWeb上で公開されているデータについて、ソフトウェアで処理しやすい形に整形したり必要な部分を抽出することをWebスクレイピングと言います。
https://e-words.jp/w/%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0.html
昨今業務効率化が叫ばれており、Webページをいちいちダウンロードしたりするなど非効率なことをせずPythonを使ってそこら辺を自動化しようみたいな動きが出ています。エンジニアのみならず、ビジネスマンが普段の業務を効率よく行うためにPythonを学んでいくことも近年流行っています。
Seleniumについて
今回スクレイピングするライブラリはSeleniumを使用します。
PythonのスクレイピングのライブラリはScrapyやBeautifulSoupなど他にいくつかありますが、今回はSeleniumを使おうと思います。Seleniumは主にWEBスクレイピングでは、JavaScriptが使われているサイトからのデータの取得や、サイトへのログインなどに使われています。
Seleniumは、標準ではインストールされていませんので各自個人でインストールしましょう。
インストールするには、下記コマンドを打ち込めばインストールできます。
pip install selenium
ChromeDriverのインストール
今回WebブラウザはGoogle Chromeを使います。Chromeを操作できるようにするために、ChromeDriverをダウンロードします。ChromeDriverとは、Chromeを操作するために必要なソフトで、Seleniumを使用してのWebスクレイピングには必要不可欠な存在です。
ここでChromeDriverをインストールする際の注意点なのですが、MacとWindowsではインストールの仕方が違うのでここは注意しておきましょう。
〜ChromeDriverのインストール Mac編〜
MacのChromeDriverのインストールは簡単です。ターミナルに以下のコマンドを打ち込むだけでインストールができます。
brew install chromedriver
〜ChromeDriverのインストール Windows編〜
下記URLからダウンロードし、作業ファイルと同階層に chromedriver.exe
を置いてください。
https://sites.google.com/a/chromium.org/chromedriver/downloads
完成ソース
from selenium import webdriver
USER = 'test'
PASS = 'testpass'
# Mac
browser = webdriver.Chrome()
# Windows
browser = webdriver.Chrome('chromedriver.exe')
browser.get('https://anime-bulletin-board.herokuapp.com')
elem_username = browser.find_element_by_name('session[name]')
elem_username.send_keys(USER)
elem_password = browser.find_element_by_name('session[password]')
elem_password.send_keys(PASS)
browser_from = browser.find_element_by_name('commit')
browser_from.click()
print("ログイン成功です!")
※今回自動ログインするサイトのURLは大学生時代に自分が趣味で開発したサイトで、低クオリティのサイトなのでそこはご了承ください。。。
解説
①seleniumの読み込みと今回ログインするサイトのユーザー名とパスワードを”USER”と”PASS”に設定します。
from selenium import webdriver
USER = 'test'
PASS = 'testpass'
②今回使用するブラウザ(chrome)の宣言を行います。MacとWindowsでは宣言するソースが違うので注意してください。そのあとbrowser.getでログインしたいサイトのURLを指定してあげます。
# Mac
browser = webdriver.Chrome()
# Windows
browser = webdriver.Chrome('chromedriver.exe')
browser.get('https://anime-bulletin-board.herokuapp.com')
③ここでサイトのフォームの要素を取得して、①で設定したユーザー名とパスワードを設定してあげます。
elem_username = browser.find_element_by_name('session[name]')
elem_username.send_keys(USER)
elem_password = browser.find_element_by_name('session[password]')
elem_password.send_keys(PASS)
find_element_byでclass属性やname属性を取得できます。今回はサイトにあるformがname属性なのでfind_element_by_nameを使用します。要素を確認したい場合は、Chromeの検証ツールを使用すれば確認することができます(検証ツールは画面を右クリックした時のメニューにあります)。
次に”send_keys”を使用することで、取得した要素に値を設定することができます。
④要素を取得してログインボタンをクリックする
browser_from = browser.find_element_by_name('commit')
browser_from.click()
print("ログイン成功です!")
③と同様に検証ツールを使用して要素を確認します。
browser_from.clickでサイトのログインボタンをクリックします。”click”を使用すればその要素をクリックすることができます。
あとはコンソールに「ログイン成功です」の文字が表示され、ブラウザでもログインができている状態になります。
動きがないただの画像でわかりくいかもしれないですが、下記のようなイメージです。
Ⅰ初期状態
Ⅱユーザー名・パスワード自動入力
Ⅲログインボタン押下後、ログイン成功画面
最後に
今回のPythonのライブラリのSeleniumを使用したブラウザ操作はいかがでしたか。今回はログインのみでしたが他にもログインした後の情報を抽出して情報を取得するなどもできます。ただし注意していただきたいのはスクレイピングはサイトによっては規約違反になります。自分もAmazonやTwitterでスクレイピングしようと思ったら規約違反でできないと知って、ちょっとショックでした。なのでスクレイピング行為をする時はそのサイトがスクレイピングを許容してくれるのかしっかりと調査が必要です。
ルールを守って楽しくスクレイピング!!