スクレイピング技術で、SUUMOのデータを取得したい!
解決したいこと
スクレイピング技術で、SUUMOのデータを取得したい🤔
現状)
記事の閲覧ありがとうございます!
初めまして🙇♀️python初学者です。
現在、suumoの物件情報を取得してその内容を分析しようとしています。
「はやたす」さんという、Youtubeで動画をアップされている方の内容を元に、1ページ内の情報取得することは出来ました(その情報をaとする。)
※以下、はやたすさんのURLです😎😎↓↓
https://www.youtube.com/watch?v=bP4Cnn73G8E
しかし、ページ内の別のリンクに飛んで更に別の情報を取ってくる(その情報をbとする)方法が分かりません、、、😭
※以下、飛びたいページのURLです↓↓
https://suumo.jp/chintai/jnc_000068611660/
例)
下記URLを参考に、状況を具体的に記載します。
https://suumo.jp/chintai/tokyo/sc_shinjuku/
上記URLで一番上に表示されている「都営大江戸線 牛込柳町駅 地下1地上14階建 新築」
という物件の「階、賃料/管理費、敷金/礼金、間取り/専有面積」までは取得できました。
私が取得したい情報はこっから更に「詳細を見る」
(飛んだ先のurl→ https://suumo.jp/chintai/jnc_000068611660/ )の欄に飛んで
「所在地、向き、建物種別」を取得したいです。
最終的にやりたいこと
①「所在地、向き、建物種別」を取得する。
②現在17000件ほどの物件データを取得し、データフレームにしているのですが、全物件のデータに「所在地、向き、建物種別」の内容を追加する。
上記2点が最終的にやりたいことです!!
新宿区の1ページ目のデータ(階、賃料/管理費、敷金/礼金、間取り/専有面積)を取得したコードは下記になります。
# 変数urlにSUMMOホームページのURLを格納する
url = 'https://suumo.jp/chintai/tokyo/sc_shinjuku/?page={}'
# 変数d_listに空のリストを作成する
d_list = []
# アクセスするためのURLをtarget_urlに格納する
for i in range(1,368):
print('d_listの大きさ:',len(d_list))
target_url = url.format(i)
# print()してtarget_urlを確認する
print(target_url)
# target_urlへのアクセス結果を変数rに格納する
r = requests.get(target_url)
sleep(0.01)
# 取得結果を分析してsoupに格納する
soup = BeautifulSoup(r.text)
# 全ての物件情報(1ページ/20件×367ページ)を取得する
contents = soup.find_all('div', class_ = 'cassetteitem')
# 各物件情報をforループで取得する
for content in contents:
#物件情報と部屋情報を取得しておく
detail = content.find('div', class_ = 'cassetteitem_content')
table = content.find('table', class_ = 'cassetteitem_other')
#物件情報から必要な情報を取得する
title = detail.find('div', class_ = 'cassetteitem_content-title').text
address = detail.find('li', class_ = 'cassetteitem_detail-col1').text
access = detail.find('li', class_='cassetteitem_detail-col2').text
age = detail.find('li', class_ = 'cassetteitem_detail-col3').text
# 部屋情報のブロックから、各部屋情報を取得する
tr_tags = table.find_all('tr', class_ ='js-cassette_link')
# 各部屋情報をforループで取得する
for tr_tag in tr_tags:
# 部屋情報を行から、欲しい情報を取得する
floor, price, first_fee, capacity = tr_tag.find_all('td')[2:6]
# さらに細かい情報を取得する
fee, management_fee = price.find_all('li')
deposit, gratuity = first_fee.find_all('li')
madori, menseki = capacity.find_all('li')
# 取得したすべての情報を辞書に格納する
d = {
'title':title,
'address':address,
'age':age,
'floor': floor.text,
'fee': fee.text,
'management_fee': management_fee.text,
'deposit': deposit.text,
'gratuity': gratuity.text,
'madori': madori.text,
'menseki': menseki.text
}
# 取得した辞書をd_listに格納する
d_list.append(d)
質問が具体的でなく申し訳ありません😭😭
解決方法をご存知の方いらっしゃいましたら、ご教示の程よろしくお願い致します。