WEBスクレイピングして一日の駅の乗降数を取得した【不動産投資】
どうもわたぞうです!いかがお過ごしですか?
たまにはWEBの話をしよう。(というかこのブログでは初めてかな?)
僕の本業はWEBを作ることだ。(エンジニアではない)
不動産に興味をもってからというものITというかテクノロジーと不動産をうまく絡められないかなーと日々思っていた。
以前こういった記事を書いたが、
不動産の物件探しをする際に、そのエリアのことを調べるために○○○線の各駅の乗降数を調べたいと思った。
基本的には1ページずつウィキペディアのサイトを検索すれば良いのだが、結構地味というか時間がかかる。。というか面倒くさい。。。
そこで
以前から興味があったWEBスクレイピングをしようと思った。
WEBスクレイピングとは?
Wikipediaによると、
ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。
簡単に言うと、webサイトからほしい情報だけ拾ってくること。
本当はPythonとかプログラミング言語を使うと簡単に早く取得できるようだが、僕はエンジニアでもないので(勉強していつかはやりたい)、もっとライトに出来る方法はないかな〜と探していたら、googleがサービス提供しているスプレットシートでできることがわかった。
スプレットシートも一応説明
スプレッドシートとは、Google社が提供しているオンライン表計算ソフトです。Excelも表計算ソフトの一つです。スプレッドシートは、Excelとほぼ同じと認識して問題ないでしょう。
まあ関数やら細かいことはExcelと違うのですが、そんな感じです。仕事で使っている人も多いと思います。
使うものとざっくりとした流れ
使うもの
- スプレットシート
- Google Chrome(ブラウザ)
流れ
- 路線の各駅リストを取得する
- wikiのURLリストを作る
- Chromeで該当の箇所のソースを調べる
- Xpathを取得し、スプレットシートに貼り付ける
- スプレットシートでデータを取得出来るように加工する
各項目の説明
大体の準備とフローはわかった。
実際にやってみよう!
1 路線の各駅リストを取得する
どこからか駅リストを探して、スプレットシートに貼り付ける
2 wikiのURLリストを作る
エクセルが使える人なら簡単ですよね。
調べたいページのURLは下記みたいな形式なので、
https://ja.wikipedia.org/wiki/東京駅
※ポイントとしては共通したURLの形で無いと取得が難しいです。
https://ja.wikipedia.org/wiki/ とかどっかに書いて
以下みたいな記述をすれば
=A$1&$A66&"駅"
こんなリストが出来上がる
3 Chromeで該当の箇所のソースを調べる
ここからが一番重要!
Chromeブラウザで調べたいWebページを開きます。調べたい所を選択して右クリックをして「検証」を選択します。
4 Xpathを取得し、スプレットシートに貼り付ける
要素のXpathをコピーする必要があるので、
取得したい箇所を洗濯して、Copy → Copy XPath をクリックする。
こんなようなやつ
//*[@id='mw-content-text']/div/table[2]/tbody/tr[9]/td/text()[1]
5 スプレットシートでデータを取得出来るように加工する
XPathがとれたら、横のシートに下記の式を入力します。
=IMPORTXML(URL, XPath)
そうすると、こんな式になります。
=IMPORTXML(F74,"//*[@id='mw-content-text']/div/table[2]/tbody/tr[9]/td/text()[1]")
それを作るとなにやらぐるぐる回りだして、
以下のようなデータを自動的に取得します。
#N/Aとなったらデータ取得失敗です。
というのも、さっきも書いたように同じルールのURLでないとだめで、
全国に同じ駅名があり、wikiでは○○○○駅(東京)などというのもあるので、
それは上記式と異なるので、手作業でとってこないといけません。
完璧ではないですね。
まとめ
注意点はスプレットシートでスクレイピングするのには限界があり、重くなるので取得に時間がかかったりします。
またスクレイピングはそもそも該当サイトへの負荷を欠ける行為なので、適度にしましょう。
ただこのように、最初はちょっと面倒だなと思う作業も一度、式(仕組み)を作ってしまえばこういう単純作業もあっという間に出来てしまうのです。後は調べたい路線の駅名リストを探してくるだけなので、繰り返し作業にはもってこいの手法になります。
またIT×不動産とかIT×金融 みたいな実験(遊び)をやっていきたいと思います。