「タウンページ」のネット版「iタウンページ」の検索結果から、住所などのリストを作成するプログラムを作成する方法を教えてください。


作成する言語は、javascriptかRubyを考えています。
ネットでいろいろ検索しましたが、サイトの方が更新されているみたいでうまくいきません。
どうやら、単純なHTMLのスクレイピングでは無理みたいです。
どうぞ、お分かりになる方はアドバイスをお願いします。

回答の条件
  • 1人5回まで
  • 登録:2012/06/11 03:20:04
  • 終了:2012/06/18 03:25:07

回答(4件)

id:uwao No.1

uwao回答回数171ベストアンサー獲得回数362012/06/11 07:01:52

ポイント75pt

検索結果のHTMLのソースから正規表現などで住所などを抜き出してファイルに保存する方法が良いように思います。
JavaScriptは馴染まないように思いますので、RubyやPHPなどで開発するのが良いと思います。

id:hisame444

ご回答ありがとうございます。
私もRubyが一番扱いなれているので、できればそれで行きたいと思います。

2012/06/11 09:22:15
id:rinta23 No.2

グリーン回答回数7ベストアンサー獲得回数02012/06/11 07:08:49

ポイント75pt

HTMLのソースで住所を抜き出して保存するのがおススメです!

id:hisame444

ご回答ありがとうございます。
しかし、検索結果のソースを見てみても、最初の20件しか表示されません。
どうしたら、表示されている結果を取得できるのでしょうか…。

2012/06/11 09:22:11
id:Cherenkov No.3

Cherenkov回答回数1503ベストアンサー獲得回数4932012/06/11 07:19:53

ポイント75pt

適当にブックマークレットを作ってみました。firefox,chromeで動作確認。

javascript:(function() {
var result = {
  keyword: document.getElementById('input-text').value,
  url: location.href,
  data: []
};
var shop = document.querySelectorAll('#main-inner [class*="box-shop-"]');
for (var i=0; i<shop.length; i++) {
  var e = shop[i];
  var name = e.querySelector('.heading a').textContent;
  var tbl = e.querySelectorAll('[class*="tbl-description-"] td');
  var address = tbl[0].textContent;
  var tel = tbl[1].textContent;
  var shopObj = {
    name: name, address: address, tel: tel
  };
  result.data.push(shopObj)
}
console.log(result);
var json = JSON.stringify(result);
var textarea = document.createElement('textarea');
textarea.value = json;
textarea.style.cssText = 'position:fixed; top:50px; left:50px; width:500px;';
document.body.appendChild(textarea);
void(0);
})();

はてなの検索結果 - iタウンページ で実行した結果

{
	"keyword": "はてな",
	"url": "http://itp.ne.jp/result/?kw=%82%CD%82%C4%82%C8",
	"data": [{
		"name": "はてな",
		"address": "〒190-0011 東京都立川市高松町3丁目30-24",
		"tel": "042-527-3339"
	}, {
		"name": "はてなパソコン教室",
		"address": "〒572-0042 大阪府寝屋川市東大利町13-18",
		"tel": "072-801-1787"
	}, 
省略
他1件のコメントを見る
id:hisame444

ご回答ありがとうございます。
ブラウザの拡張は経験がないため、入門サイトを参照しながら試してみます。

2012/06/11 12:37:30
id:Cherenkov
var result = {
  keyword: document.getElementById('input-text').value,
  url: location.href,
  data: []
};
var shop = document.querySelectorAll('#main-inner [class*="box-shop-"]');
for (var i=0; i<shop.length; i++) {
  var e = shop[i];
  var name = e.querySelector('.heading a').textContent;
  var tbl = e.querySelectorAll('[class*="tbl-description-"] td');
  var address = tbl[0].textContent;
  var tel = tbl[1].textContent;
  var shopObj = {
    name: name, address: address, tel: tel
  };
  result.data.push(shopObj)
}
console.log(result);
var json = JSON.stringify(result);
var textarea = document.createElement('textarea');
var csv = result.data.map(function(e){
  return [e.name, e.tel, e.address].join(',')
});
textarea.value = csv.join('\n');
//textarea.value = json;
textarea.style.cssText = 'position:fixed; top:50px; left:50px; width:500px;';
document.body.appendChild(textarea);

こうすればcsvに

2012/06/12 05:36:09
id:nobu99991 No.4

のぶひで回答回数19ベストアンサー獲得回数02012/06/11 07:51:46

ポイント75pt

HTMLのソースで住所抜き出して保存。

id:hisame444

ご回答ありがとうございます。
検索結果のソースには、最初の20件しか入っていないみたいなのですが…。

2012/06/11 09:23:41
  • id:Cherenkov
    具体的に入力と出力をどんな仕様にしたいんですか?
  • id:Cherenkov
    このサイトのコードを動くようにしたいとか。
  • id:hisame444
    検索結果を"会社名,職種,電話番号,郵便番号,住所"といった具合にcvsで保存して、Excelで開けるようにしたいと思っています。
  • id:Cherenkov
    検索条件は?キーワードや地域でごっそりではなく、URLを与えてその検索結果の全件をcsvに保存できればいい?
  • id:hisame444
    出来れば、博多や金沢など地域単位の業種を指定した検索結果をまとめて取得できれば最高ですが、難しいようなら検索結果のページのURLごとでも構いません。
  • id:hisame444
    上でご提示いただいたブックマークレットのサンプルをchromeで試した結果、"印刷"で検索した場合は期待通りの結果が出たのですが、"印刷 北九州"だと結果が表示されませんでした。
    自分でもいろいろ試してみます。
  • id:Cherenkov
    確かにエラーを吐いて正しく動作しませんでした。
    var shop = document.querySelectorAll('[class*="box-shop-"]');

    var shop = document.querySelectorAll('#main-inner [class*="box-shop-"]');
    にすればいけます。
  • id:zipless
    こちら、今でも動きますか??

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません