PythonでWebスクレイピングをやってみた ~7~
今回からWebスクレイピングでchocoZAPのページから店舗名と店舗の住所を読み出すコードの説明になります。
最初に使用したライブラリですが、以下のようになりました。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from bs4 import BeautifulSoup
from time import sleep
import re
import csv
seleniumとBeautifulSoupは、ほぼWebスクレイピング専用のライブラリですね。あとはWebページが読み込まれるまでの待ち時間を決めるためのtimeモジュールと、取得したWebページの文字列から必要なものだけを取り出すための正規表現モジュールre、最後にcsvファイルへの出力に使ったcsvモジュールになります。
driver_path = "./chromedriver.exe"
service = Service(executable_path=driver_path)
driver = webdriver.Chrome(service=service)
driver.get("https://chocozap.jp/studios/search/filters")
sleep(2)
上の部分がSeleniumでchromedriverを使うための記述と、ドライバーを使ってchocoZAPのページにアクセスしている部分になります。Selenium3とSelenium4とでは書き方が大きく異なっているようで、Selenium3用に書かれた記述ではうまく動かなかった気がします。sleep(2)は適当に入れたwaitで、Webサーバーが応答してHTMLを送ってくるのに時間がかかるので、待ち時間を設定しています。
dropdown = driver.find_element(By.NAME, "prefecture")
select = Select(dropdown)
select.select_by_index(13)
sleep(2)
上の部分はchocoZAPのページで検索する都道府県を設定している部分になります。都道府県を指定するドロップダウンメニューの名前が"prefecture"となっていて、その中で「東京都」のインデックスが13番目だったので上記のような記述になりました。
ちなみに今回SeleniumでのWeb操作を記述する際に使ったツールが「Selenium IDE」です。Selenium IDEについては下記の動画の最後の方に出てくるのでそちらを見てください。
なおSelenium3とSelenium4ではこの辺の操作の記述も異なるみたいなので、注意が必要です。
driver.find_element(By.CSS_SELECTOR, ".search-button").click()
sleep(5)
上の部分がchocoZAPのページで「絞り込んで表示」ボタンを押す部分になります。
chocoZAPのページは「絞り込んで表示」ボタンを押すまで店舗の一覧が出てこないので、以前使ったrequestsライブラリではダメなのでした。
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
上の記述はSeleniumで最下端まで画面をスクロールする部分になります。とりあえず「絞り込んで表示」ボタンを押したあと一度スクロールしています。chocoZAPのページはスクロールしていかないと店舗の情報が表示されないので、全ての店舗の情報を得るためには上記の最下端までスクロールを何度か繰り返しながら店舗の情報を都度保存するという処理が必要になります。
ここまででSeleniumを使う部分の説明は終わりで、次回からはWebページのHTMLから必要なデータを取り出すBeautifulSoupの記述部分を説明することにします。
この記事が気に入ったらサポートをしてみませんか?