Мне нужно провести исследование рынка недвижимости, для этого мне нужны цены и другие ценности новых домов.
Так что моя идея состояла в том, чтобы перейти на сайт, где я получаю информацию. Перейдите на главную страницу поиска и найдите все идентификаторы RealEstateID, которые приведут меня непосредственно к отдельным страницам каждого дома, где я смогу извлечь нужную информацию.
У меня две проблемы:
Во-первых, на сайте около 60 идентификаторов, но я получаю только около 20.
Во-вторых, формат электронной таблицы Excel помещает заголовки столбцов над каждой записью, а каждая запись - только в одной ячейке, а не в разных столбцах.
Если бы кто-то мог объяснить мне, как я могу решить эти проблемы и сказать, что я сделал неправильно, я был бы очень рад услышать это
import requests
import json
from bs4 import BeautifulSoup as bs
import datetime as dt
import os
import pandas as pd
import pandas_datareader.data as web
import re
import time
import urllib.request
from urllib.request import urlopen
import csv
res = requests.get('https://www.immobilienscout24.de/Suche/S-T/Wohnung-Kauf/Nordrhein-Westfalen/Duesseldorf/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/true?enteredFrom=result_list') #This is the main search site where I get the IDs
soup = bs(res.content, 'lxml')
r = re.compile(r'resultListModel:(.*)')
data = soup.find('script', text=r).text
script = r.findall(data)[0].rstrip(',')
results = json.loads(script)
ids = [item['@id'] for item in results['searchResponseModel']['resultlist.resultlist']['resultlistEntries'][0]['resultlistEntry']] #This should get me the IDs and put it into a list so i can use it later
print(ids) #My test that I get all the IDs and not just a few
data = json.dumps(ids)
houseinfo = {}
csvData = [['id','purchasePrice','Spacesize','District','Flattyp','Rooms']] #Dataformat for the Excel-Spreadsheet colums later
def get_house_info (House): #this is the function that inserts the IDs from the List into the URLs and than scraps the Values that I need into a new list
for id in ids:
try:
sourceCode = urllib.request.urlopen('https://www.immobilienscout24.de/expose/' + str(id)).read()
purchasePrice = str(sourceCode).split('"purchasePrice":')[1].split(',"geoCode"')[0]
Spacesize = str(sourceCode).split('"area":')[1].split('},"details"')[0]
District = str(sourceCode).split('"quarter":')[1].split('},')[0]
Flattyp = str(sourceCode).split('"is24qa-typ grid-item three-fifths">')[1].split('</dd> </dl> <dl class')[0]
Rooms = str(sourceCode).split('is24qa-zimmer grid-item three-fifths"> ')[1].split(' </dd> </dl> <dl class=')[0]
with open('foo.csv', 'a') as csvfile: #appends the values to the file
cols = ['id', 'price', 'size', 'district', 'flattyp', 'rooms']
dict_result = {'id': id, 'price': purchasePrice, 'size': Spacesize, 'district': District, 'flattyp': Flattyp, 'rooms': Rooms}
writer = csv.DictWriter(csvfile, fieldnames=cols)
writer.writeheader()
writer.writerow(dict_result)
csvfile.close()
except Exception as e:
print("failed in the main loop", str(e))
get_house_info(ids)