イクメンデータアナリストのブログ

コンサルのこと/Pythonのこと/Tableauのこと などを備忘録的に書いていこうと思います。

【Pythonでスクレイピング】画面遷移のやり方(フォームに記入して送信)

こんにちはbudouです!

今回はPythonを使ったスクレイピングに関して書いていきたいと思います。

whotwi検索画面
whotwi検索画面

特定の検索ワードで検索実施→結果画面に行く→戻って別の検索ワードで検索実施→...

whotwi検索結果画面
whotwi検索結果画面

これを自動でやらせたいと思います。

はじめに

スクレイピングはデータ分析をしていたり、何かサービスを考えようとしていると必要な場面が出てくるものと思います。

webスクレイピングで必要な要素は下記。

  1. 必要な情報があるwebページまでたどり着く。
  2. 必要な情報があるwebページまでたどり着いたら、そのページから必要な情報を取り込んでくる。

今回は1.必要な情報があるwebページまでたどり着く。 こちらのやり方のイメージを持てることが目標です。

結論、必要なことは

  • "遷移前のページ"の「どこになんのアクションすれば良いのか」を理解する。
  • 「どこにアクションすれば良いか」を知ったのちに必要なコーディング。

これだけです。

必要な情報があるwebページまでたどり着くときに必要なアプローチ3つ

  1. フォームに何かを記入して、「検索」や「送信」ボタンを押して結果を検索するようなページ。 ← ここで説明するのはこれです。
  2. ページ遷移のためにクリックする必要があるようなページ。
  3. チェックボックスなどにチェックをして条件を絞り込み、絞り込んだ結果を「検索」や「送信」して結果を検索するようなページ。

では始めていきます。

"遷移前のページ"の「どこになんのアクションをすれば良いのか」を理解する。

今回「フォームに何かを記入して、「検索」や「送信」ボタンを押して結果を検索するようなページ」ということで、 サンプルとしてwhotwiのサイトで試したいと思います。

whotwiのサイトでは、TwitterIDを検索することで、そのIDの方の情報がいくつかの観点で集計されたものを見ることが出来るTwitter分析する際に便利なサイトです。

まず、画面の適当なところで右クリックして「検証」を開きます。(F12キー押下でも良いです)

chrome開発ツール
chrome開発ツール
画面の目的地がハイライトされているところを目指してhtmlをどんどん開いていきましょう。

chrome開発ツール
chrome開発ツール
こんな感じで最終地点が見えるまで辿りましょう。

このなかにある

<input type="text" class="form-control input-lg" id="index_search_input" name="screen_name" placeholder="Twitter ID">

が目的地となります。

「どこにアクションすれば良いか」を知ったのちに必要なコーディング。

目的地がはっきりしましたので、コーディングしていきましょう。

今回はseleniumでブラウザを動かします。

これらのライブラリを使います。

import requests
import time
from selenium import webdriver

ロームのドライバーをダウンロードします。使用しているブラウザのバージョンと、ドライバーのバージョンを合わせましょう。

スクレイピングでは到達したい目的地がはっきりとしたらあとはそこに「どうやって辿り着くか」それだけです。 細かい辿り方などは、 https://qiita.com/memakura/items/20a02161fa7e18d8a693
このサイトなどに詳しいので、ご自身のやりたいことなどは参考にして頂くと良いかと思います。

# chromedriver.exeのパスを指定し、driverのインスタンスを作成する。
# path_driver = '../../データ分析/scraping/chromedriver.exe'
driver = webdriver.Chrome(executable_path = path_driver)
driver.get(url)

今回は運よく目的地にid属性がありましたのでidを探しにいきます。(idは同じhtmlの中で一つしか付けられないのでスクレイピング時にはidを基軸に探したりすることが多いです。)

次に、
- 目的地探し当て
- 検索キーワードを書き込み
- 検索を実行する
をします。

# サンプルとして、自身のtwitterIDとインフルエンサーで検索してみます。
list_target = ["budounomizu_san","takapon_jp"]

for i in list_target:
    # 選択したい要素を指定して探してきてもらう。
    serch_box = driver.find_element_by_id("index_search_input")
    # 何か入力してあればそれをクリアする。
    serch_box.clear()
    # 検索するTwitter_IDを検索ボックスへ送る。
    serch_box.send_keys(i)
    # 検索する!(ここではEnterボタン押すのと同じ)
    serch_box.submit()
    # 前の画面に戻る。
    driver.back()
    # ちょっとまってもらう。(ここでは1秒ストップしてもらう)
    time.sleep(1)
# ドライバーを閉じる。(試行錯誤しているときは閉じない方が良いかも)
driver.close()

これでchromeを自動で起動して→検索ワードを順番に探しにいって→画面を戻ってまた探しに行く→...という繰り返しを自動化させることが出来ました!

おわりに

「必要な情報があるwebページまでたどり着く」 ために必要な要素

  1. フォームに何かを記入して、「検索」や「送信」ボタンを押して結果を検索するようなページ。
  2. ページ遷移のためにクリックする必要があるようなページ。
  3. チェックボックスなどにチェックをして条件を絞り込み、絞り込んだ結果を「検索」や「送信」して結果を検索するようなページ。

この1番に関してコードともに紹介させて頂きました。

2番と3番も次の記事で書いていこうと思ってます。

以上、よろしくお願いします。

<追記>
2. ページ遷移のためにクリックする必要があるようなページ。 はこちらに書きました。

www.budounomizu.work