白旗製作所

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']"で置き換えて
どちらの場合にも対応する方法を用いていますが、このタグ内に無い情報には使えません。


スポンサーサイト
  1. 2017/04/03(月) 00:38:59|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
<<ScanSnap ix500Aを使った書籍読み取り設定 | ホーム | トコジラミへの対処法>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://dededemio.blog.fc2.com/tb.php/40-785d881a
この記事にトラックバックする(FC2ブログユーザー)