食べログでは高評価だったのに行ってみたらガッカリということが何度もあったので、行きたい店を食べログで管理することをやめようと思いました。移行先はGoogleマップです。「どこかいい店ないかな」って探すときって、地図で探すほうが便利ことが多いんですよね。いちいち食べログのアプリ立ち上げて何回もポチポチするよりGoogleマップの方が圧倒的に楽。というわけで、食べログで保存済みのお店情報にGoogleマップでの検索URLを付加してCSVに出力してみます。
環境
- Python3
- Mac
- Google Chrome
あとはSeleniumとクリップボードを扱えるライブラリをpipで入れとく必要があります。
$ pip install selenium pyperclip
OSのバージョンにもよりますが、MacにプリインストールされているPythonを使用する場合は pip3
とする必要があるかも。このあたりは適宜読み替えてください。
goodbye-tabelog-hello-google-map.py
こちらがそのソースコードです。2020.1.25版
なお食べログにログインする必要があるのですが、私はFacebook認証でログインしているので、コードはそのようになっています。他のログイン方法を使用している場合は適宜編集して使用してください。
import csv from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import NoSuchElementException import pyperclip FACEBOOK_ID = 'FacebookのユーザーID' FACEBOOK_PASSWORD = 'Facebookのパスワード' driver = webdriver.Chrome(options=Options()) driver.get('https://tabelog.com/') # Facebookでログイン driver.find_element_by_class_name('js-open-login-modal').click() driver.find_element_by_class_name('p-login-btn--facebook').click() driver.find_element_by_id('email').send_keys(FACEBOOK_ID) driver.find_element_by_id('pass').send_keys(FACEBOOK_PASSWORD) driver.find_element_by_id('loginbutton').click() # 保存済みページへ driver.find_element_by_class_name('p-user-menu__target--hozon').click() restaurants = [] while True: # 「店舗情報をコピー」ボタンの一覧を取得する WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'js-copy-restaurant-info-to-clipboard'))) clipboard_buttons = driver.find_elements_by_class_name('js-copy-restaurant-info-to-clipboard') for button in clipboard_buttons: button.click() # 店舗情報をクリップボードから取得(1行目から お店の名前,[電話番号],住所,食べログURL) data = pyperclip.paste().split('\n') if len(data) < 4: # 電話番号がない場合はその箇所に空文字を挿入しておく data.insert(1, '') # Googleマップでの検索URL map_url = 'https://www.google.co.jp/maps/search/' + ' '.join(data[0:3]) data.append(map_url) restaurants.append(data) try: # 次ページへ driver.find_element_by_class_name('c-pagination__arrow--next').click() except NoSuchElementException: break # CSVに出力する with open('result.csv', 'wt', encoding='utf_8_sig') as f: writer = csv.writer(f, quoting=csv.QUOTE_ALL) writer.writerows(restaurants) print('終了しました') driver.quit()
$ python goodbye-tabelog-hello-google-map.py
で実行すると、Google Chromeが自動で起動しスクレイピングが始まります。headlessにすると上手く動かない箇所があったのでやめました。
結果のCSVはカレントディレクトリに result.csv
として保存します。文字コードはBOM付きUTF8にしてますので、そのままExcelで開くことができます。出力内容は
- お店の名前
- 電話番号
- 住所
- 食べログのURL
- Googleマップでの検索URL
となっており、最終列のGoogleマップでの検索URLを開くと(基本的には)そのお店の情報がナレッジパネルに開かれるようになってまので、移行が楽にできると思います。
余談
実は最初はGoogleマップで保存し、食べログの保存を削除するところまで自動でやってたのですが、どうもGoogleマップでの保存でビミョーな挙動があったので、公開するのはやめておきました。リクエストがあればそちらも公開しようかなと思ったり。
300件ほどあった行きたい店をマップにプロットするのはなかなか爽快ですよ!でもこんなにたくさん行けるわけないので、今後は本当に行きたい店だけ登録しようと思った今日この頃です。
関連する記事
- capybaraを使ってWebページをスクレイピングする(テストじゃなくて)
- ラズベリーパイに日本語で喋らせる[その2]Amazon Polly
- Google AIY Voice Kit V2の基本操作サンプル集
- ラズベリーパイに日本語で喋らせる[その1]Google Cloud Text-To-Speech
- ラズベリーパイに日本語で喋らせる[その3]Open JTalk
はじめまして。
自動でGoogleマップで保存し、食べログの保存を削除するスクリプトがありましたら
ぜひ公開していただきたいです・・・!
すいません、この記事を書いたのが結構昔の話でして、食べログやGoogle側にも色々と更新があり、スクリプトがもう動かなくなってるみたいです。
需要ありそう&簡単だったら時間あるときにまた作って公開しますね!
ご返信ありがとうございます!
作用ですか!ちなみにPython初心者で恐縮なのですが
この記事のスクリプトはまだ動きますか?このスクリプト自体も
もう動かないものでしょうか?
おそらく動かないと思いますね・・・
2年半ぐらい前の記事なのですが、食べログのサイト側も色々と変更が入ってると思うので、変更があると動かなくなるのです。
なるほどです。
自分でできるように学んでいきます!!
ご丁寧にご返信いただきありがとうございました。