Как мне создать CSV-файл со словарем и использовать переменные только в качестве ключей и значений

#python #dictionary #variables #append #key

#python #словарь #переменные #добавить #Клавиша

Вопрос:

Мне нужно провести некоторое исследование рынка недвижимости, и для этого мне нужны цены и другие значения из новых домов.

Итак, моя идея заключалась в том, чтобы зайти на веб-сайт, где я получаю информацию. Перейдите на главный поисковый сайт и очистите все идентификаторы объектов недвижимости, которые позволят мне перейти непосредственно к отдельным страницам для каждого дома, где я могу извлечь нужную мне информацию. Прямо сейчас я получаю все данные, которые мне нужны для каждого дома, но только в виде необработанных данных print() . Я хочу сохранить все это в файле .csv, и мой подход заключался в использовании файла словаря. Поскольку я новичок в Python, было бы здорово, если бы вы могли мне помочь и объяснить мне мою ошибку.

В конце csv.file должен выглядеть так:

 IDS Price  Size District  Flattyp  Rooms
123  1200  250  Hollywood  good     4
253  25       Beverly Hills bad     2
952
  

Код:

 res = requests.get('https://www.immobilienscout24.de/Suche/S-T/Wohnung-Kauf/Nordrhein-Westfalen/Duesseldorf/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/true?enteredFrom=result_list')
soup = bs(res.content, 'lxml')
r = re.compile(r'resultListModel:(.*)')
data = soup.find('script', text=r).text
script = r.findall(data)[0].rstrip(',')
#resultListModel:
results = json.loads(script)
ids = list(results['searchResponseModel']['entryInformation'].keys())

data = json.dumps(ids)
houseinfo = {}

csvData = [['id','purchasePrice','Spacesize','District','Flattyp','Rooms']]

def get_house_info (House):
    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]
            #parking_space = str(sourceCode).split('<dd class="is24qa-garage-stellplatz grid-item three-fifths">')[1].split('</dd> </dl>')[0]
            #parking_price = str(sourceCode).split('<dd class="is24qa-garage-stellplatz-kaufpreis grid-item three-fifths">')[1].split('</dd> </dl> </div>')[0]
            #print(id, purchasePrice, Spacesize, Flattyp, Rooms, District,)

            houseinfo [id]= {'price' : purchasePrice, 'size' : Spacesize,
                             'district': District, 'flattyp' : Flattyp,
                             'rooms': Rooms};

            with open ('house.csv', 'a') as csvData:
                writer = csv.writer(csvData)
                writer.writerow(houseinfo)

            csvData.close()

        except Exception as e:
            print("failed in the main loop", str(e))

get_house_info(ids)
  

Ответ №1:

Похоже, вы очень близки. Поскольку похоже, что у вас уже есть словарь с именем houseinfo, который для каждого идентификатора имеет словарь определенного формата, я бы рекомендовал сделать что-то вроде

 with open('foo.txt', 'w') as csvfile:
    cols = ['price', 'size', 'district', 'flattyp', 'rooms']
    dict_result = {'price': 1.0, 'size': 1, 'district': 'Hollywood', 'flattyp': 'good', 'rooms': 3}
    writer = csv.DictWriter(csvfile, fieldnames=cols)
    writer.writeheader()
    writer.writerow(dict_result)
  

где dict_result ваш houseinfo[id] .

В результате получается текстовый файл

 price,size,district,flattyp,rooms
1.0,1,Hollywood,good,3
  

Который затем вы можете прочитать с помощью csvreader.