suumo賃貸物件情報取得スクリプト

そのうち引っ越すつもりで家探しを始めたのですが、

物件の数が多すぎて、比較したり条件に合う物件を抽出するのがかなりめんどくさいです。

比較評価をexcelでちまちまやっていると、条件を自動で取得してきたくなります。

物件DBにアクセスさせてくれれば良いんですけど、どうもそういうDBは公開されていないようで、

suumo等の不動産会社のWebページから、Webスクレイピングで情報を取得することが行われているようです。

以下では、GoogleスプレッドシートのIMPORTXML()関数を用いて、HTMLからXPathを用いて

情報を取得する方法が紹介されています。

家探しのための Suumo スクレイピング用スプレッドシート

Google Spreadsheetで効率的に物件を探す

たとえば、

=REGEXREPLACE(IMPORTXML(A3,"//*[@id='contents']/div[1]/div[2]/div[1]/table/tbody/tr/td[1]/div/div[1]/span"), "万円", "")

をセルに入力すると、A3に記載したURLの物件ページから、家賃の情報を取得し、数字部分のみを表示することができます。

しかしながら、私の環境では、物件数を増やすとIMPORTXML()関数の数が多すぎるようで、

GoogleスプレッドシートがLoading...で止まってしまいました。

どうにかならないかトライしてみたのですが、あまり改善が見られなかったので、

Pythonスクリプトを作成しました。

基本的にやっていることはGoogleスプレッドシートと一緒で、

lxml.htmlとrequestsモジュールをインポートし、指定したURLからXPathでテキストを取得しています。

また、pandas.DataFrameにデータを追加し、まとめてcsvで外部に保存します。

車を持っているので駐車場の情報も取得したかったのですが、

取得しに失敗したのでここは列だけ用意しています。

これで以下のように情報をまとめた表が作れるので、

Excelの機能を使って自由に処理ができます。

suumoのWebスクレイピング結果例

ちなみに、上のコードにない情報でもXPathさえわかれば同様に取得できます。

XPathの調べ方は、たとえばFireBug等ブラウザアドオンのデバッグツールを使う方法があります。

意外と知られていない、FirebugのX-pathコピー機能

ただし、Webページの状態によってXPathのタグ番号等が異なるので、注意が必要です。

たとえば、suumoの場合、ユーザーログイン中とそうでない状態でURLとXPathが微妙に異なるので、

URLから状態を判定して使用するXPathを分ける等しないといけません。

今回のコードでは、最初のdivタグまでを"//*[@id='contents']"で置き換えて

どちらの場合にも対応する方法を用いていますが、このタグ内に無い情報には使えません。