【Python】ログインが必要なサイトをスクレイピング

スクレイピングができると作業の自動化や情報収拾が簡単になり、Web系の技術を扱う人にとっては大きな武器となります。本記事では、ログインが必要なページ(プロフィールなど)をスクレイピングする方法をご紹介します。




スクレイピング初心者

最近スケベな波に乗ってスクレイピングしてみたけど
商品の購入履歴とかログイン後にしか
見れないページは無理なのかなあ
こんな悩みにお答えします。

ログイン後のページでもスクレイピングはできる

結論から言うと、ログインが必要なページでもスクレイピングはできます。

今回はPythonでスクレイピングすることを前提としていまして、使う技術としては

  • Python
  • Selenium
  • Beautiful Soup

になります。

Seleniumって何?

Selenium automates browsers. That’s it!

Seleniumとは、ブラウザを機械的に操作するための技術になります。
プログラムを書くことで、普段しているクリックやスクロールといった処理を自動化してくれるツールです。

ブラウザや言語を問わず、PythonだろうがRubyだろうが、GoogleChromeだろうがFirefoxだろうが使用可能です。

Beautiful Soupって何?

Beautiful Soupとは

Beautiful Soup はHTMLやXMLファイルからデータを取得するPythonのライブラリです。あなたの好きなパーサー(構文解析器)を使って、パースツリー(構文木)の探索、検索、修正を行います。 これはプログラマーの作業時間を大幅に短縮してくれます。

要するに、HTMLやXMLファイルの中身(

タグなど)を取得して、Python上で変数として簡単に扱うためのライブラリです。

今回は、Seleniumで自動でログイン、ページ移動をして、各ページでBeautifulSoupを使ってパース(解析)するといった流れです。

ログイン処理の自動化とスクレイピングを行うソースコード

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd
import requests
from bs4 import BeautifulSoup
from time import sleep

//今回はGoogleChromeを使用
driver = webdriver.Chrome(chromedriverのパス)
id = "ログインID"
password = "ログインパスワード"

url = "スクレイピングしたいページのURL"
driver.get(url)

//ページの構造をみながら、id()内を書き換え
driver.find_element_by_id("login_username").send_keys(id)
driver.find_element_by_id("login_password").send_keys(password)
driver.find_element_by_id('submit_button').send_keys(Keys.ENTER)

//とりあえず1ページ目のtableタグを取得してみる
page = 1
sleep(5)
# dfs = pd.DataFrame(pd.read_html(driver.page_source))
bsObj = BeautifulSoup(driver.page_source, "html.parser")
table = bsObj.find("table")
print(table)
page += 1
driver.find_element_by_link_text(str(page)).click()

//ページ数分繰り返す
for i in range(ページ数):
sleep(5)
page += 1
df = pd.DataFrame(pd.read_html(driver.page_source))
bsObj = BeautifulSoup(driver.page_source, "html.parser")
table = bsObj.find("table")
print(table)
driver.find_element_by_link_text(str(page)).click()

参考にしたサイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください