Kohei Blog

夫・父親・医療系エンジニア

Pythonで中古住宅情報をスクレイピングしてみた

住宅情報サイトを見ていて、1つずつ情報を見るよりも、「データ形式でざっと全体像を把握したい」って思うことがあり、スクレイピングで解決してみた

今回は、 SUUMOから情報を取得してみました。

スクレイピングのコード

BeautifulSoupを使いました。

import requests
from bs4 import BeautifulSoup
import pandas as pd
from time import sleep

pages = '1'
# 対象URL
url = f"https://suumo.jp/jj/bukken/ichiran/JJ012FC001/?ar=060&bs=021&sa=01&ta=27&po=0&pj=1&pc=100&pn={pages}"

res = requests.get(url)
soup = BeautifulSoup(res.text,'html.parser')
# 検索結果件数からページ数を算出
post_count = soup.select('div.pagination_set-hit')[0].text
post_count = post_count.replace('件', '').replace(',', '').strip()
max_page = math.ceil(int(post_count) / 100)

# ページ数の数だけループ
list_all = []
for page in range(1, (max_page + 1)):
    pages = page
    res = requests.get(url)
    soup = BeautifulSoup(res.text,'html.parser')

    # get htmltag
    title = soup.find_all('h2')
    price = soup.select('span.dottable-value')
    addr = soup.find_all('dt', text='所在地')
    access = soup.find_all('dt', text='沿線・駅')
    land_area = soup.find_all('dt', text='土地面積')
    build_area = soup.find_all('dt', text='建物面積')
    year_built = soup.find_all('dt', text='築年月')
    # 取得したページhtmlからタグ取得
    # 1ページあたりの表示数は100 なので100でループ処理
    for i in range(100):
        csv_list = []

        csv_list = [
          title[i].a.string,
          "https://suumo.jp" + title[i].a['href'],
          price[i].string.replace('万円',''),
          addr[i].find_next_sibling().text,
          access[i].find_next_sibling().text,
          land_area[i].find_next_sibling().text.split('m')[0],
          build_area[i].find_next_sibling().text.split('m')[0],
          year_built[i].find_next_sibling().text,
        ]
        list_all.append(csv_list)
  sleep(10)


# リストをユニークに変換
def get_unique_list(seq):
    seen = []
    return [x for x in seq if x not in seen and not seen.append(x)]

# dataframeへ格納
header = ['タイトル','URL','価格','所在地','沿線・駅','土地面積','建物面積','築年月']
df = pd.DataFrame(get_unique_list(list_all),
                  columns=header)

f:id:kei_01011:20210518093001p:plain

こんな感じで、それぞれの住宅情報がデータ形式にできました。

あとは集計するなり分析するなり、いろいろできそう。

やってること

対象URLの部分には、SUUMOでスクレイピングしたい条件で検索し、検索結果で表示された一覧ページを入力します。

結果ページのページ数を数えて、ページ分だけループ処理して取得してきます。

複数の住宅情報サイトからスクレイピングして比較してみるのも面白そうですね。