hh_research
hh_research copied to clipboard
KeyError: 'employer'
$ python researcher.py --text "Golang developer" --refresh
[INFO]: Get exchange rates: {'USD': 0.012641, 'EUR': 0.010831, 'UAH': 0.35902, 'RUR': 1}
[INFO]: Collect data from JSON. Create list of vacancies...
Get data via HH API: 0%| | 0/582 [00:00<?, ?it/s]
Traceback (most recent call last):
File "/content/hh_research/researcher.py", line 97, in <module>
hh_analyzer()
File "/content/hh_research/researcher.py", line 81, in __call__
vacancies = self.collector.collect_vacancies(
File "/content/hh_research/src/data_collector.py", line 192, in collect_vacancies
for vacancy in tqdm(
File "/usr/local/lib/python3.10/site-packages/tqdm/std.py", line 1195, in __iter__
for obj in iterable:
File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 621, in result_iterator
yield _result_or_cancel(fs.pop())
File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 319, in _result_or_cancel
return fut.result(timeout)
File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 458, in result
return self.__get_result()
File "/usr/local/lib/python3.10/concurrent/futures/_base.py", line 403, in __get_result
raise self._exception
File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
File "/content/hh_research/src/data_collector.py", line 120, in get_vacancy
vacancy["employer"]["name"],
KeyError: 'employer'
Работает только с Data mining
Слишком быстрое и большое число запросов приводит к тому, что vacancy = requests.api.get(url).json() возвращает url с капчей. Что и вызывает keyerror, потому что в "возврате" такого нет Мною было найдено оптимальное решение поставить перед этой строкой time.sleep(0.2) и настроить 1 поток (стоит по умолчанию num_workers = 1) Да, не быстро, но зато без ошибок
Принял PR с взятием значения словаря по ключу через get, как минимум в этом месте не должно падать. Sleep потенциально тоже должен помочь, но в идеале нужно делать полноценный retry, когда прилетает капча и туда засунуть ожидание.