Как собрать информацию с сайта и перейти к следующему пункту, если информация не существует - PullRequest
0 голосов
/ 20 июня 2019

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

Я уже пробовал это с if / else заявлениями, но я сделал некоторую ошибку, чтобы она не работала так.Я получаю сообщение об ошибке:

"UnboundLocalError: локальная переменная 'Flattyp', на которую ссылается перед присваиванием"

def get_house_info (House):
    for id in ids:
            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]
            if Flattyp != str(sourceCode).split('"is24qa-typ grid-item three-fifths">')[1].split('</dd> </dl> <dl class')[0]:
                Flattyp = "nicht vorhanden"
            else:
                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]
            if parking_space != str(sourceCode).split('<dd class="is24qa-garage-stellplatz grid-item three-fifths">')[1].split('</dd> </dl>')[0]:
                parking_space = "nicht vorhanden"
            else: 
                parking_space = str(sourceCode).split('<dd class="is24qa-garage-stellplatz grid-item three-fifths">')[1].split('</dd> </dl>')[0]

            with open('fooneu23.txt', 'a') as csvfile:
                cols = ['id', 'price', 'size', 'district', 'flattyp', 'rooms', 'parking_space','Flattypp']
                dict_result = {'id': id, 'price': purchasePrice, 'size': Spacesize, 'district': District, 'flattyp': Flattyp, 'rooms': Rooms, 'parking_space':parking_space, 'Flattypp':Flattypp}
                writer = csv.DictWriter(csvfile, fieldnames=cols)
                writer.writeheader()
                writer.writerow(dict_result)

            csvfile.close()

1 Ответ

0 голосов
/ 20 июня 2019

Ошибка здесь:

if Flattyp != str(sourceCode).split('"is24qa-typ grid-item three-fifths">')[1].split('</dd> </dl> <dl class')[0]:
    Flattyp = "nicht vorhanden"
else:
    Flattyp = str(sourceCode).split('"is24qa-typ grid-item three-fifths">')[1].split('</dd> </dl> <dl class')[0]

На первой итерации вы сравниваете Flattyp с чем-то, а Flattyp еще не установлено.

Что касается вашей первоначальной проблемы, вы слышали о try / catch заявлениях?

Вы должны раз и навсегда декодировать ответ на ваш запрос вместо того, чтобы приводить его к строке несколько раз:

sourceCode = urllib.request.urlopen(
                  'https://www.immobilienscout24.de/expose/' + str(id)
             ).read().decode('utf8')

Наконец, вы никогда не должны использовать функции str (regexp, split) для анализа html. Используйте соответствующие HTML-парсеры, такие как beautifulsoup .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...