@Deman1

Ошибки при парсинге в python как избежать?

Добрый день, делаю парсинг своего сайта так как нет доступа к базе для экспорта, столкнулся с проблемой при парсинге
print(g[3].find_all('input')) 
[<input class="js-region-id" id="org-del-region-id" name="ClientInfoForm[regionId]" type="hidden"/>, <input class="form-control" data-krajee-typeahead="typeahead_307a21f9" id="org-del-country-search" name="ClientInfoForm[regionSearch]" placeholder="Регион" type="text"/>, <input class="js-town-id" id="clientinfoform-townid" name="ClientInfoForm[townId]" type="hidden" value="2444"/>, <input class="form-control" data-krajee-typeahead="typeahead_307a21f9" id="org-del-town-search" name="ClientInfoForm[townSearch]" placeholder="Город" type="text" value="Москва"/>, <input class="form-control" id="clientinfoform-address" name="ClientInfoForm[address]" type="text"/>]

Если пытаюсь получить value в imput где он указан то все ок
uq["val"] = g[3].find_all('input')[2]['value']
'val' : 'text'

А если пытаюсь где его нет ошибка
uq["val"] = g[3].find_all('input')[1]['value']
 File "C:\Users\Администратор\Desktop\pars\site.py", line 27, in user
    uq["val"] = g[3].find_all('input')[1]['value']
  File "C:\Users\Администратор\AppData\Local\Programs\Python\Python311\Lib\site-packages\bs4\element.py", line 1573, in __getitem__
    return self.attrs[key]
KeyError: 'value'

Как избежать и проверить есть или нет, если нет оставить поле пустым?
Хотелось бы коченый результат
'val' : 'text' если успешно
'val' : '' если не успешно

База большая у некоторых эти поля заполнены а у некоторых нет
Сам чайник делаю все в первый раз из костылей, главное результат)
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Может обрабатывать исключения?
def extract_value_from_input(element, index):
    try:
        return element.find_all('input')[index]['value']
        # or @Maksim_64
        return element.find_all('input')[index].get('value','')
    except (IndexError, KeyError):
        return ''

uq = {}
uq["val"] = extract_value_from_input(g[3], 1)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
привыкай к длинным записям
не
uq["val"] = g[3].find_all('input')[2]['value']
а
uq["val"] = None if 'value' not in g[3].find_all('input')[2] else g[3].find_all('input')[2]['value']
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы