【Python】GoogleMap検索結果から自動で緯度経度情報を取得改

前回の記事でGoogleMapの検索結果をスクレイピングする方法について紹介しましたが、その方法でがうまくスクレイピングできないことがわかりました(ご指摘いただきましたありがとうございます。)。

おそらくGoogleMapの仕様が変わってしまったからだと思います。classの名前やidの名前が全く違うものになっていました。以前にも確認したことがあったのですが、定期的に変わるようです。

なので、修正した方法も今後使えなくなる可能性が大きいです。そこで変更の可能性があるところだけ皆さんで修正してもらえれば使える内容にしようと思いますので、ご興味ある方は見てもらえれば幸いです。なお、スクレイピングの基本的なところは以前の記事を参考にしていただければと思います。



方針

紹介する方法の大まかな方針ですが、前回とほぼ変わっていませんが、以下のとおりです。

①GoogleMapを開き検索

②検索結果を下までスクロールし全URLを取得(1ページおそらく20件)

③タブを開き取得したURLを一つ一つ開き、緯度経度を取得

④全URLを調べ終えたら一旦タブを閉じ、次の検索ページに移動

以下、全検索結果終了まで同じ

コードの解説

作成したコードの全文をまず載せます。

コードの細かい説明はコメント分で書いてあるので参考にしていただければ幸いです。

工夫した点について解説します。

画面のスクロール

検索した画面には検索結果がずらっと表示されます。その一つ一つを取得したいのですが、そのままでは取得できません。画面をスクロールして検索結果をロードしないといけないみたいです。そのための部分です。画面をスクロールするにはpythonの中でjavascriptを使ってhtmlを操作するのがいいみたいです。こちらのサイトを参考にしました。

しかしそのままでは、なぜかうまくいきませんでしたので、こちらのサイトを参考に”スクロールトップ=スクロール高さ-スクロールオフセット“となったとき下までスクロールしたとみなして、終了しました。

要素サイズとスクローリング (https://ja.javascript.info/size-and-scrollより引用)

変更する箇所

今後変更が予想される場所が3箇所あります。

スクロール対象のクラス

検索結果のクラス

次ページのクラス

以上になります。タイトル以外にも検索結果の電話番号やサイトURLなんかを取得したい場合には別途classやidの取得が必要になり、それも変更する可能性があります



まとめ

今回前回の記事でできなくなったスクレイピングの修正を行いました。ただ、今後のことを考えるとGoogleMapAPIを使って何かしらするのが良いかもしれないです。勉強したらまた紹介したいと思います。

参考サイト

コメント

  1. あしかぺんぎん様
    ご対応大変ありがとうございました。
    しかも、こんなに早く詳しくすごいですねぇ~
    早速試してみます。
    また、修正のコツまで記載いただいたのでしっかり勉強してみます。

タイトルとURLをコピーしました