ホームズ スクレイピング
スーモでは同様の使用でデータを取得できましたが、ホームズではできませんでした。
発生している問題・エラーメッセージ
page 1 items 0 page 2 items 0 page 3 items 0 page 4 items 0 : page 875 items 0 と表示されエラーが出ません。
該当のソースコード
python
1```from retry import retry 2import requests 3from bs4 import BeautifulSoup 4import pandas as pd 5 6base_url = "https://www.homes.co.jp/search/condition1/?page={}" 7 8@retry(tries=3, delay=10, backoff=2) 9def get_html(url): 10 r = requests.get(url) 11 soup = BeautifulSoup(r.content, "html.parser") 12 return soup 13 14all_data = [] 15max_page = 875 16 17for page in range(1, max_page+1): 18 url = base_url.format(page) 19 20 soup = get_html(url) 21 22 items = soup.findAll("div", {"class": "moduleInner prg-building"}) 23 print("page", page, "items", len(items)) 24 25 for item in items: 26 stations = item.findAll("span", {"class": "prg-stationText"}) 27 28 for station in stations: 29 base_data = {} 30 base_data["名称"] = item.find("span", {"class": "bukkenName prg-detailLinkTrigger"}).getText().strip() 31 base_data["カテゴリー"] = item.find("span", {"class": "bType"}).getText().strip() 32 base_data["アドレス"] = item.find("div", {"class": "bukkenSpec"}).findAll("td")[0].getText().strip() 33 base_data["アクセス"] = station.getText().strip() 34 base_data["築年数"] = item.find("div", {"class": "bukkenSpec"}).findAll("td")[2].getText().strip() 35 base_data["構造"] = item.find("div", {"class": "bukkenSpec"}).findAll("td")[2].getText().strip() 36 37 38 tbodys = item.find("table", {"class": "unitSummary unitResidenceSummary"}).findAll("tbody") 39 40 for tbody in tbodys: 41 data = base_data.copy() 42 data["階数"] = tbody.findAll("td")[1].findAll("li")[0].getText().strip() 43 data["家賃"] = tbody.findAll("td")[2].getText().strip() 44 data["管理費"] = tbody.findAll("td")[2].getText().strip() 45 data["敷金"] = tbody.findAll("td")[2].getText().strip() 46 data["礼金"] = tbody.findAll("td")[2].getText().strip() 47 data["間取り"] = tbody.findAll("td")[3].getText().strip() 48 data["面積"] = tbody.findAll("td")[3].getText().strip() 49 50 data["URL"] = tbody.findAll("td")[5].find("a").get("href") 51 52 all_data.append(data) 53 54df = pd.DataFrame(all_data) 55df.to_csv('211025_23区.csv', encoding='utf_8_sig') 56 57### 試したこと 58 59 60 61### 補足情報(FW/ツールのバージョンなど)
インデントを正しくつけていないからでは。
from retry import retry
import requests
from bs4 import BeautifulSoup
import pandas as pd
base_url = "https://www.homes.co.jp/search/condition1/?page={}"
@retry(tries=3, delay=10, backoff=2)
def get_html(url):
r = requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")
return soup
all_data = []
max_page = 875
for page in range(1, max_page+1):
url = base_url.format(page)
soup = get_html(url)
items = soup.findAll("div", {"class": "moduleInner prg-building"})
print("page", page, "items", len(items))
for item in items:
stations = item.findAll("span", {"class": "prg-stationText"})
for station in stations:
base_data = {}
base_data["名称"] = item.find("span", {"class": "bukkenName prg-detailLinkTrigger"}).getText().strip()
base_data["カテゴリー"] = item.find("span", {"class": "bType"}).getText().strip()
base_data["アドレス"] = item.find("div", {"class": "bukkenSpec"}).findAll("td")[0].getText().strip()
base_data["アクセス"] = station.getText().strip()
base_data["築年数"] = item.find("div", {"class": "bukkenSpec"}).findAll("td")[2].getText().strip()
base_data["構造"] = item.find("div", {"class": "bukkenSpec"}).findAll("td")[2].getText().strip()
tbodys = item.find("table", {"class": "unitSummary unitResidenceSummary"}).findAll("tbody")
for tbody in tbodys:
data = base_data.copy()
data["階数"] = tbody.findAll("td")[1].findAll("li")[0].getText().strip()
data["家賃"] = tbody.findAll("td")[2].getText().strip()
data["管理費"] = tbody.findAll("td")[2].getText().strip()
data["敷金"] = tbody.findAll("td")[2].getText().strip()
data["礼金"] = tbody.findAll("td")[2].getText().strip()
data["間取り"] = tbody.findAll("td")[3].getText().strip()
data["面積"] = tbody.findAll("td")[3].getText().strip()
data["URL"] = tbody.findAll("td")[5].find("a").get("href")
all_data.append(data)
df = pd.DataFrame(all_data)
df.to_csv('211025_23区.csv', encoding='utf_8_sig')
失礼しました、該当ソースコードにインデント反映されていませんでした。
上記なのでインデントは問題ないと思います。
どこをどう見れば「上記なのでインデントは問題ない」という認識に至れるのでしょうか。
通常のテキスト入力では、インデントのタブやスペースは表示されませんので、マークダウンを用いて記載していただけないでしょうか。
https://teratail.com/help/question-tips#questionTips3-3-1 参照
回答1件
あなたの回答
tips
プレビュー