【python】Google MAPで店舗をスクロールする方法(スクレイピング時に重要!!)
Google Map の検索結果をスクロールする方法です。表示された結果を普通にスクレイピングをしても1画面で20件あるのに、10件くらいしか取得できません。原因は検索結果をスクロールさせたタイミングで10件以降の情報を内部的に取得する仕様になっているためです。
スクロールさせるにはいろいろな方法があり、色々と試してみました。
sendkey("Keys.END")
では動かない。
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
で、強制的にスクロールを試みてもだめ。
手動でスクロールさせることはできるので、擬似的に手動でスクロールさせる作戦にしました。
PyAutoGuiを使用する
import pyautogui as pag
pag.moveTo(***,***)
pag.click(***,***)
pag.dragTo(***,***,3,button='left')
マウスカーソルをpythonで制御しスクロールバーを下にドラッグしてスクロールさせます。
スクレーピング中はカーソルの制御をpythonで行うため、他の作業はできません・・。
だから、できるだけPyAutoGuiは使いたくなかった・・。
インストール方法
PyAutoGuiをインストールします。
pip install pyautogui
実際に使用してみる
モジュールをインポートします。
% python
>>> import pyautogui as pag
pagという名前でインポートしていますが、名前は何でもいいです。
スクロールの座標を取得する
>>> pag.mouseInfo()
実行するとマウスの座標が取得できますのでスクロールバーの上下の座標を取得します。
座標を取得する際はブラウザをフルスクリーン表示したほうが良いです。
>>> pag.moveTo(404,270)
>>> pag.dragTo(404,1215,3,button='left')
上のコードを実行すると座標(404,270)から座標(404,1215)までマウスの左ボタンでドラッグする動きをします。
Gmapのスクレイピングについて調べてもなかなか出てこなかったので記録しておきます。
ディスカッション
コメント一覧
【python】Google MAPで店舗をスクロールする方法(スクレイピング時に重要!!)について
# スライダー1
def downs():
try:
#down_btn=driver.find_element_by_xpath(‘//*[@id=”QA0Szd”]/div/div/div[1]/div[2]/div/div[1]/div/div/div[2]/div[1]’)# パターン1
down_btn=driver.find_element_by_xpath(‘//*[@id=”pane”]/div/div[1]/div/div/div[2]/div[1]’)# パターン2
down_btn.send_keys(Keys.SPACE)
time.sleep(1)
except:
down_btn=driver.find_element_by_xpath(‘//*[@id=”QA0Szd”]/div/div/div[1]/div[2]/div/div[1]/div/div/div[2]/div[1]’)# パターン1
#down_btn=driver.find_element_by_xpath(‘//*[@id=”pane”]/div/div[1]/div/div/div[2]/div[1]’)# パターン2
down_btn.send_keys(Keys.SPACE)
time.sleep(1)
downs()
こちらでスクロール(ページダウン)しました。
既にご存知でしたら申し訳ございません。
スクロールバーの要素をxpathで取っていますが
変更のされる可能性もあると思われます。
現在googlemapsで企業情報の取得を試みていますが
検索一覧から個別企業を開いてからのスクロールが
上手く行きません。
もしも ご存知でしたら御享受頂けませんでしょうか?
パイソン初学者な故、失礼ありましたら
お許しくださいませ。
スクロールバーをクリックする方法もありますね!ありがとうございます。
検索結果の遷移先でプログラムを実行する場合、検索結果のURLをリストで取得し、そのリストをもとにdriver.get()を回す手法を取ります。
検索結果ページから遷移させてしまうと、別タブで開いてしまったりして、うまく動いてくれないことが多いからです。