GoToEatひょうごが使える店をgoogle mapにしてみた(python/beautifulsoupでwebスクレイピング)
目的!
go to eatひょうごキャンペーンの食事券が使える店を地図で見たい! gotoeat-hyogo.com
webスクレイピングをやってみたい
どっちかというと2番目の目的が先で、何かないかなと思った時に1が出てきた感じです。 python(JupyterNotebook)を使って作ってみました。
出来たこと
go to eatひょうごキャンペーンの食事券が使える店の情報を読み込んで、google mapに読み込むcsvファイルを作成!
作ったgoogleマップがこちら↓ www.google.com
出来なかったこと
googleマップに自動で読み込みは出来ず、手動読み込みに・・・
自動操作はgoogleに禁止されているようです。
準備
使った環境などを雑に並べる
- mac catalina : 10.15.7
- chrome : 86
- python : 3.9.0
- JupyterNotebook : 6.1.4
- requests:データ取得ライブラリ
- BeautifulSoup:データ抽出ライブラリ
※なんとなくAnacondaは使わず、適当にpip3でインストール
ざっくり処理の抜粋&説明
requestsで、キーワード(兵庫県の市町村ごとに)から食事券が使える店を検索
import requests from bs4 import BeautifulSoup as bs4 … #検索ページのURL、検索ワード、ページ数から結果のページ情報を取得 url ="(検索ページのURL)" param = {"keyword" : (検索ワード), "page" : (検索ページ数)} res = requests.get(url, param)
主にbeautifulsoupのselectを使って 検索結果&詳細ページから店の情報(店名、住所、電話番号、webサイト、営業時間)を抽出
#ページ解析 search_result = bs4( res.text, "html.parser") #店舗情報のエリアを取得(1ページで10件ぐらいあったので、リストで取得して順番に処理) store_list = search_result.select("div.search-results-list-box") for store in store_list: #店名 store_name = store.select("p.search-results-list-name")[0].text #住所 store_address = store.select("p.search-results-list-p01")[0].text.replace(" ", "").replace("\n", "").replace("住所:", "") ...
あとは各店舗の情報を1行にしてcsvに出力
import csv csv_filename = "goto_eat_" + search_word + ".csv" f = open(csv_filename, mode = 'w', encoding='utf-8', errors = 'ignore') writer = csv.writer(f, lineterminator = '\n') csv_list = [] csv_list.append(store_name) csv_list.append(store_address) … writer.writerow(csv_list)
詳細コードは↓ https://github.com/kyamada23/goto_eat_hyogo
詰まったところなど
JupyterNotebookがでなんか起動しない問題
jupyter notebook
コマンドを実行すると、自動でchromeのページが開いて↓のページが表示されるんですが、
「click here to go to Jupyter.」をクリックしても全然反応してくれない・・・
ターミナルにこれをコピーしろみたいなのがあったのでとりあえずそれ(↓の一番下だけ)をコピペして表示されました。
To access the notebook, open this file in a browser: file:///Users/… Or copy and paste one of these URLs: http://localhost:8888/?token=… or http://127.0.0.1:8888/?token=…
隣の要素取得がしっくりこない
<th>定休日</th> <td>毎週火曜日</td>
上記で定休日の要素を見つけて、その隣の情報を取得しようとするときに
(定休日の要素).next_sibling
だと取得できず(改行が取得されるから?)
(定休日の要素).next_sibling.next_sibling
と2回繰り返すと取得できた。
go to eatひょうごの食事券アクセス殺到問題
食事券を購入する時にアクセスが殺到して、全然ページが開かずに買うまでにめちゃめちゃ時間がかかりました。 11/10分からは抽選になっているみたいです。
JupyterNotebook
気軽に実行するには便利なんですが、ファイル形式が独自のものになるので、git管理すると分かりづらい感じがしました。 終わったらpython形式に出力したらいいのかも?
感想
覚えたwebスクレイピングを試してみるにはいい素材だったかなと思います。
他の都道府県のもやってみると面白いかも
ちなみに企業が作った地図検索サービスもあります!(あるかなと思っていたけど、作るまではあえて調べなかった)