Python スクレイピング

【Python】GoogleMapをAPIでスクレイピングして施設の詳細情報を取得する

この記事は約14分で読めます。

 

こんにちは、ミナピピン(@python_mllover)です。今回はGoogleMAPのAPIをpythonで使ってみたので、使い方をメモしておこうと思います。

 

関連記事:【Python】Youtubeの動画コメントをAPI経由で全件取得する

関連記事:【Python】Youtubeの再生数・コメント数・高評価数をスクレイピングで取得する

 

事前準備

 

・API鍵の作成とサービスの有効化

 

まず以下の記事の参考にAPI鍵を作成した後、GoogleMapのAPIのうちplaces APIGeocoding APIを有効化してください。

 

参考記事:【GCP】GoogleCloudPlatformでプロジェクトを作成してAPI鍵の作成&有効化する

 

 

 

・クライアントライブラリのインストール

 

Googleの提供しているAPIはPythonで使用するためにラッピングしたものをライブラリとしてGoogle公式が作ってくれているのでこれをインストールしてそのまま使います。

 

# ライブラリのインストール
$ pip install googlemaps

Gitのソース:https://github.com/googlemaps/google-maps-services-python

 

Googlemapに表示されている施設情報を取得

 

これで前準備は完了したので実際にPythonでAPIを叩いてみます。施設情報を取得はplaces_nearby()で行います。locの位置情報を基準として半径〇㎞いないのキーワードに当てはまる施設名を検索してくれます

 

import googlemaps
import pprint

key = 'api鍵' 
client = googlemaps.Client(key) 

# 基準になる位置情報を検索 
geocode_result = client.geocode('埼玉駅 メッキ工場') 

# 軽度・緯度の情報のみ取り出す 
loc = geocode_result[0]['geometry']['location'] 

#半径100㎞以内の工場情報を取得 
place_results = client.places_nearby(location=loc, radius=1000000, keyword='埼玉 メッキ',language='ja')
pprint.pprint(place_results)

 

<実行結果>

'results': [{'geometry': {'location': {'lat': 35.633795, 'lng': 139.6608681},
                           'viewport': {'northeast': {'lat': 35.63512747989272,
                                                      'lng': 139.6621710298927},
                                        'southwest': {'lat': 35.63242782010728,
                                                      'lng': 139.6594713701073}}},
              'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/cafe-71.png',
              'id': '458005d7b299cb781bb3ea89f697a8e440a9638d',
              'name': 'rice cafe',
              'photos': [{'height': 4618,
                          'html_attributions': ['<a '
                                                'href="https://maps.google.com/maps/contrib/109845876179671154841/photos">石川智子'],
                          'photo_reference': 'CmRaAAAAhfmVkWgNOtv6jcKhFDi97cGGMSmpnc_ojnHFkQBjwwZTwk7hur-ylWbGTRCY6CS3CWDQbYvldUySha-ZqMU-T9_Hd5ZGR7Anoq1_R4D2oX0IaJNOTYznWwbpqGDMkjfBEhCybXtyozfgV_q_FKfz__tiGhSXQ_TYyKkWfQfoKz_tVsJCT1iHfQ',
                          'width': 3464}],
              'place_id': 'ChIJF3G_G5D0GGARwHen_P84lKw',
              'plus_code': {'compound_code': 'JMM6+G8 Tokyo, 東京都 Japan',
                            'global_code': '8Q7XJMM6+G8'},
              'rating': 4.2,
              'reference': 'ChIJF3G_G5D0GGARwHen_P84lKw',
              'scope': 'GOOGLE',
              'types': ['cafe', 'food', 'point_of_interest', 'establishment'],
              'user_ratings_total': 54,
              'vicinity': '4 Chome-5-5 Kamiuma, Setagaya City'},
             {'geometry': {'location': {'lat': 35.6332433, 'lng': 139.6617063},
                           'viewport': {'northeast': {'lat': 35.63459312989272,
                                                      'lng': 139.6630561298927},
                                        'southwest': {'lat': 35.63189347010728,
                                                      'lng': 139.6603564701072}}},
              'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/cafe-71.png',
              'id': 'b99fb5f85ed8c6893b51829ecefb2dfe55de93cd',
              'name': 'TOKYO People’s Cafe Komazawa',
              'opening_hours': {'open_now': False},
              'photos': [{'height': 3024,

 

Googleマップに登録されている場所や建物にはplace_idというものがそれぞれに付与されているので詳細情報を返すAPIをplace_idを引数に乗せて叩くと営業時間とかwebサイトのURLとか検索したときに、画面の右側にナレッジパネルで出てくる情報に関しては取得できるみたいです。

 

次はこのplace_idを使用して施設のより詳細な情報(Google検索でナレッジパネルに表示されている内容)を取得します。

 

ナレッジパネル自体にもAPIは提供されていますが有名人や世界遺産みたいな有名どころの情報はAPIレスポンスとして返ってきますが、レストランや工場といった中小施設の情報は返ってこないのでこの方法でしか取得することはできないと思います。

 

place_idから施設の公式サイトURLなどの詳細情報を取得する

 

place_idによる詳細情報を取得はplace()で行えます。

 

res = client.place(place_id='ChIJt79nsgWRGGARUJXQmghtCxg', language='ja')['result']

 

 

<実行結果例>

{'html_attributions': [],
 'result': {'address_components': [{'long_name': '13',
    'short_name': '13',
    'types': ['premise']},
   {'long_name': '3',
    'short_name': '3',
    'types': ['sublocality_level_4', 'sublocality', 'political']},
   {'long_name': '5-chōme',
    'short_name': '5-chōme',
    'types': ['sublocality_level_3', 'sublocality', 'political']},
   {'long_name': 'Asahi',
    'short_name': 'Asahi',
    'types': ['sublocality_level_2', 'sublocality', 'political']},
   {'long_name': 'Kawaguchi',
    'short_name': 'Kawaguchi',
    'types': ['locality', 'political']},
   {'long_name': 'Saitama',
    'short_name': 'Saitama',
    'types': ['administrative_area_level_1', 'political']},
   {'long_name': 'Japan',
    'short_name': 'JP',
    'types': ['country', 'political']},
   {'long_name': '332-0001',
    'short_name': '332-0001',
    'types': ['postal_code']}],
  'adr_address': '5-chōme-3-13 Asahi, Kawaguchi, Saitama 332-0001, Japan',
  'business_status': 'OPERATIONAL',
  'formatted_address': '5-chōme-3-13 Asahi, Kawaguchi, Saitama 332-0001, Japan',
  'formatted_phone_number': '048-229-4611',
  'geometry': {'location': {'lat': 35.8099011, 'lng': 139.746483},
   'viewport': {'northeast': {'lat': 35.81125763029149,
     'lng': 139.7479165802915},
    'southwest': {'lat': 35.8085596697085, 'lng': 139.7452186197085}}},
  'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/v1/png_71/generic_business-71.png',
  'icon_background_color': '#7B9EB0',
  'icon_mask_base_uri': 'https://maps.gstatic.com/mapfiles/place_api/icons/v1/png_71/generic_pinlet',
  'international_phone_number': '+81 48-229-4611',
  'name': '常木鍍金工業(株) 技術研究所',
  'place_id': 'ChIJjWFwlpaTGGARKTzmRfZCLRU',
  'plus_code': {'compound_code': 'RP5W+XH Kawaguchi, Saitama, Japan',
   'global_code': '8Q7XRP5W+XH'},
  'reference': 'ChIJjWFwlpaTGGARKTzmRfZCLRU',
  'types': ['point_of_interest', 'establishment'],
  'url': 'https://maps.google.com/?cid=1525949474250570793',
  'utc_offset': 540,
  'vicinity': '5-chōme-3-13 Asahi, Kawaguchi',
  'website': 'http://www.tsuneki-mf.co.jp/'},
 'status': 'OK'}

 

こんな感じでサイトのURLや電話番号などナレッジパネルに表示されている内容が取得できます。

 

APIドキュメント:

https://developers.google.com/maps/documentation/places/web-service/place-id

 

 

これらを一連の処理をスクリプトにすると以下のようになります。

 

import googlemaps
import pprint

key = 'api鍵'
client = googlemaps.Client(key)

# 基準になる位置情報を検索
geocode_result = client.geocode('埼玉駅 メッキ工場')

# 軽度・緯度の情報のみ取り出す
loc = geocode_result[0]['geometry']['location']

#半径100㎞以内の工場情報を取得
place_results = client.places_nearby(location=loc, radius=1000000, keyword='埼玉 メッキ',language='ja')
pprint.pprint(place_results)

# 検索結果から工場名と建物コードを取得してコードからナレッジパネルの詳細情報 
に公式サイトのurlが登録されている場合はURLを取得 
for i in place_results['results']: 
    print(i['name'], i['place_id']) 
    place_detail = client.place(place_id=i['place_id']) 
    try: 
        print(place_detail['result']['website']) 
    except: 
        print('サイトがありません') 
        pass

 

<実行結果>

埼玉県鍍金工業組合 ChIJVQ4sy9nFGGAR3YJAuz2LnY4
埼玉県鍍金工業組合
(株)大宮鍍金工業 本社 ChIJRTSVoxHEGGARfb6Cd2OYHJw
亜鉛めっき加工なら株式会社大宮鍍金工業
株式会社大宮鍍金工業は、亜鉛めっきを主体に大量生産から多種少量ロットまで柔軟に対応する金属表面処理メーカーです。難易度が高い、鋳物・ステンレス上へのメッキにも対応。3価クロム化成皮膜にも対応。本社工場(埼玉県さいたま市)・川越工場の2拠点を有し、エコアクション21取得、障害者雇用も積極的に行っております。
日本電鍍工業(株) ChIJ_Sn8Iw7EGGARe4GVZmB1T-0
金・銀・プラチナめっきなど表面処理なら【日本電鍍工業㈱】
金めっき、銀めっき、プラチナめっきなどの貴金属めっきをはじめ、ニッケルめっきや銅めっき、陽極酸化など表面処理をしている会社です。時計、医療、楽器、電子部品、宝飾など幅広い分野に対応しております。
(株)大宮鍍金工業 川越工場 ChIJ_zYefHTQGGAR4WhlBNYawAw
http://www.omiya-mekki.co.jp/company.html
島田工業所 ChIJq6oO_gLrGGARhrj3z9jvy6c
鍍金剥離・電解研磨の島田工業所
湯沢メッキ(株)八潮工場 ChIJB7r8K1SQGGAR1uJrKVkw8xs
溶融亜鉛鍍金|湯沢メッキ株式会社|千葉県市川市/埼玉県八潮市
高品質・短納期・低価格。湯沢メッキ株式会社は千葉県市川市/埼玉県八潮市に工場を構え、高品質・高精度の,溶融亜鉛メッキ加工製品をお客様に供給するため、社員一丸となって、常に品質管理を行っております。
(株)東工業 ChIJH2hLq7HGGGAR9kEG4W4GiVg
埼玉県・東京等でメッキ・鍍金なら 株式会社東工業 - 埼玉県・東京等でメッキ・鍍金なら 株式会社東工業
埼玉県・東京等でメッキ・めっき・鍍金・金属表面処理のことなら株式会社東工業。一般メッキ(銅・ニッケル・クロム・亜鉛・錫めっき等)、無電解メッキ(無電解ニッケルめ・テフロンめっき等)、貴金属メッキ(銀・金めっき等)を提供。
有限会社渡辺鍍金工業所 ChIJv7b3kq_rGGARr-5gowVvhuA
最新情報 - 有限会社渡辺鍍金工業所
新光メッキ工業(株) ChIJSQaCeHbqGGARyIG3upn9nX4 サイトがありません 常木鍍金工業(株) ChIJGQKdIJSTGGARb9QiLWzoBl0
常木鍍金工業株式会社
(有)板橋鍍金工業所 ChIJV25Si4KaGGARavOwDFqrY14 サイトがありません (有)平野メッキ工場 ChIJd6SaYoKaGGARw6JOqgb6ih4
自転車めっき/装飾めっき/ステンレスへのめっき (有)平野メッキ工場
三共鍍金(株) ChIJyTl5sFnfGGARw9YaioP_X6Q サイトがありません

 

参考:https://www.for-engineer.life/entry/python-google-api/

 

 

コメント

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