Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KeyError: 'employer' #11

Open
ngitn opened this issue Mar 2, 2024 · 2 comments
Open

KeyError: 'employer' #11

ngitn opened this issue Mar 2, 2024 · 2 comments

Comments

@ngitn
Copy link

ngitn commented Mar 2, 2024

$ 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

@mainarel
Copy link

mainarel commented Mar 3, 2024

Слишком быстрое и большое число запросов приводит к тому, что vacancy = requests.api.get(url).json() возвращает url с капчей. Что и вызывает keyerror, потому что в "возврате" такого нет
Мною было найдено оптимальное решение поставить перед этой строкой time.sleep(0.2) и настроить 1 поток (стоит по умолчанию num_workers = 1)
Да, не быстро, но зато без ошибок

@hukenovs
Copy link
Owner

hukenovs commented Mar 3, 2024

Принял PR с взятием значения словаря по ключу через get, как минимум в этом месте не должно падать. Sleep потенциально тоже должен помочь, но в идеале нужно делать полноценный retry, когда прилетает капча и туда засунуть ожидание.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants