yahooマップでGPS値をクローリングで取得する方法

2020年4月18日

テクノロジー プログラミング

mapデータにまあまあ詳しくなってきた、ユゲタです。 「GPS」とかけまして、 「待ち合わせの時の暇つぶし」と、ときます。 そのココロは・・・ くるまで(車で、来るまで)便利に使えます。

yahooマップは優秀

以前紹介した「geocoding.jp」サービスで、住所を検索してみても、GPSの値が取得できずにエラーページになってしまう事が何度か発生したので、GPS値クローリングのシステムを見直すことにしました。 リンク : [便利サービス] 住所からGPSの値を取得できるフリーサイトgeocoding Googlemapは、初回からクレカ登録をしなければいけないので、実験段階の今の段階ではもっと簡易にしたいと考えてyahooマップを使うことにしました。 geocodingで検索できなかった住所も、yahooマップでは表示されているので、双方をうまく使って検索結果率を高めてみたいと思います。

URL設定と検索処理が必要

googleMapやgeocodingでは、サイトドメインにクエリとして住所を追加して、そのURLを開いただけで、マップが表示されていたので、yahooマップも同じ仕様だと思っていたんですが、どうやら、違っていました。 yahooマップのトップページは、以下のURL https://map.yahoo.co.jp/maps 検索すると本当のトップページは下記なのですが、上のURLの方が、曖昧な住所も検索してくれて非常に便利に使えます。 https://map.yahoo.co.jp/ そして、検索フォームに住所を登録して、「検索」ボタンを押すとマップが表示されるという感じですね。 ちなみに、ダイレクトにURLクエリにアクセスしてみると、GPS値の取得がされず、ピンも立たないマップが表示されます。

クローリング方法

そして、検索したページ内の、".jssearch"(class名)というaリンクの属性に、"lat"と"lon"があるので、これが検索結果のGPS値になります。 puppeteerのコースコードも載せておきます。 var puppeteer = require('puppeteer'); var path_chromium = '/usr/bin/chromium-browser'; var url = "https://map.yahoo.co.jp/maps"; var response = await page.goto(url, {waitUntil: "load",timeout:0}).catch(function(err){console.log(err);}); await page.waitFor("#yschsp", {waitUntil: "load",timeout:5000}).catch(function(err){console.log(err);}); await page.type("#yschsp", "住所"); page.click('#search'); await page.waitFor(".jssearch", {waitUntil: "load",timeout:5000}).catch(function(err){console.log(err);}); var gps = await page.evaluate(function(){ var elm = document.querySelector(".jssearch"); if(elm){ return elm.getAttribute("lat")+","+elm.getAttribute("lon") } else{ return ""; } }).catch(function(err){console.log(err);}); console.log(gps); await browser.close(); 住所の箇所に、リアルな都道府県からの地名を入れると、gpsの値が、"lat,lon"形式で返るようになっています。 使用の環境に合わせてソースを書き換えてお使いください。

yamlを使ったほうがいい?

puppeteerで便利に住所入力して、検索ボタンを押して、GPS値を取得できるようになったので、とりあえず、geocodingと併用してGPSデータ取得に活用させてもらおうと思います。 でも、YahooにはYAMLという便利なAPIがあり、これを使ったほうが遥かに正確に問題なくスピードも早くデータ取得ができてしまうことは、重々承知の上です。 そうした場合は、puppeteerではなくて、PHPでダイレクトに取得できるので、構成自体が変わってしまうので、今のところはこれでヨシとしておきましょう。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。