{"id":21024370,"url":"https://github.com/hukenovs/hh_research","last_synced_at":"2026-03-12T14:44:12.666Z","repository":{"id":38407925,"uuid":"202755628","full_name":"hukenovs/hh_research","owner":"hukenovs","description":"Автоматизация поиска и исследования вакансий с сайта hh.ru (Headhunter) с помощью методов Python. Классификация данных, поиск статистических параметров.","archived":false,"fork":false,"pushed_at":"2024-06-18T00:21:38.000Z","size":2933,"stargazers_count":105,"open_issues_count":4,"forks_count":30,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-06-19T02:53:25.161Z","etag":null,"topics":["api","data-mining","development","headhunter","http","json","jupyter-notebook","machine-learning","matplotlib","nltk-python","numpy","pandas","parser","python","research","salary","statistics"],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hukenovs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-08-16T15:45:29.000Z","updated_at":"2025-06-15T16:31:33.000Z","dependencies_parsed_at":"2024-03-03T13:30:29.342Z","dependency_job_id":"9a33722e-c3a2-475f-83d8-9ec2fb673a26","html_url":"https://github.com/hukenovs/hh_research","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hukenovs/hh_research","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hukenovs%2Fhh_research","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hukenovs%2Fhh_research/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hukenovs%2Fhh_research/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hukenovs%2Fhh_research/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hukenovs","download_url":"https://codeload.github.com/hukenovs/hh_research/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hukenovs%2Fhh_research/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30428710,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T14:34:45.044Z","status":"ssl_error","status_checked_at":"2026-03-12T14:09:33.793Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","data-mining","development","headhunter","http","json","jupyter-notebook","machine-learning","matplotlib","nltk-python","numpy","pandas","parser","python","research","salary","statistics"],"created_at":"2024-11-19T11:25:36.808Z","updated_at":"2026-03-12T14:44:12.647Z","avatar_url":"https://github.com/hukenovs.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Автоматизация поиска и анализа вакансий hh.ru\n\n**Идея**: проект упрощает поиск, анализ и исследование особенностей вакансий на hh.ru.\nСкрипт использует API hh.ru для доступа к данным вакансий.\n\n### Общая информация\n\n| **Title**     | HeadHunter Find \u0026 Research    |\n| :--           | :--                           |\n| **Author**    | Alexander Kapitanov           |\n| **Language**  | Python (3+)                   |\n| **Release**   | 14 Aug 2019                   |\n| **License**   | GNU GPL 3.0                   |\n\n![Example Data Frame](img/prev_table.png \"Example Data Frame\")\n\n____\n\n### Requirements\nПример установки зависимостей для Python 3.9\n\n```bash\ngit clone \u003crepo.git\u003e\ncd \u003crepo\u003e\n\nconda create -n venv python=3.9\nconda activate venv\n\npython researcher.py \u003coptions\u003e\n```\n\n### Command line arguments\n```bash\nusage: researcher.py [-h] [--text TEXT] [--professional_roles ROLE1 ROLE2 ...] [--num_workers MAX_WORKERS] [--refresh] [--save_result] [--update]\n\nHeadHunter (hh.ru) vacancies researcher\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -t TEXT, --text TEXT  Search query text (e.g. \"Machine learning\")\n  -p [PROFESSIONAL_ROLES ...], --professional_roles [PROFESSIONAL_ROLES ...]\n                        Professional role filter (Possible roles can be found here https://api.hh.ru/professional_roles)\n  -n NUM_WORKERS, --num_workers NUM_WORKERS\n                        Number of workers for multithreading.\n  -r, --refresh         Refresh cached data from HH API\n  -s, --save_result     Save parsed result as DataFrame to CSV file.\n  -u, --update          Save command line args to file in JSON format.\n```\n\n### Config file\nВсе параметры находятся в конфигурационном файле, пример:\n```json\n{\n  \"options\": {\n    \"text\": \"Data Scientist\",\n    \"area\": 1,\n    \"per_page\": 50,\n    \"professional_roles\": [96, 10]\n  },\n  \"refresh\": false,\n  \"num_workers\": 10,\n  \"save_result\": false,\n  \"exchanges\": [\"RUB\", \"USD\", \"EUR\", \"UAH\"]\n}\n```\n\n### Input data\nВходные данные - словарь ключевых значений, формирующих запрос.\n\n**Основные параметры**:\n- `area` - локация поискового запроса (пример: `{area: 1}` - Москва),\n- `text` - поисковой запрос для вакансий (пример: `{text : Machine Learning}` или `{text: Java}`),\n- `per_page` - количество вакансий на страницу, по умолчанию **50**.\n- `professional_roles` - фильтр по роли в запросе ([возможные значения](https://api.hh.ru/openapi/redoc#tag/Obshie-spravochniki/paths/~1professional_roles/get))\n\nи другие параметры (в зависимости от требуемого запроса).\n\nПример графика распределения зарплат:\n\n![Example Salary Distribution](img/from_to2.png \"Example Salary Distribution\")\n\n### Run\n\nДля запуска скрипта необходимо задать обязательный параметр ключевого запроса поиска. В системах Windows ключевой запрос в двойных кавычках! Например: `Machine Learning` или `JavaScript`.\nСкрипт запускается из командной строки:\n\n`python researcher.py --text \"Python Developer\"`\n\nМожно задать параметр `--refresh`, который обновляет кешируемые данные о вакансиях. Для повторных запросов, отличающихся от первичного, это обязательный параметр.\n\n`python researcher.py --text \"Data Mining\" --refresh`\n\n### Processing\n- Ответ от удаленного ресурса в виде json-массива для текущего курса валют: `{RUR, USD, EUR, UAH}`.\n- На базе словаря **входных данных** формируется URL для запроса данных с hh.ru через API,\n- Создается список всех `id` вакансий,\n- Парсинг JSON в ответ на запрос по всем `id` вакансий,\n    - Анализ параметра `salary` для формирования словаря зарплат:\n        - Для зарплат, указанных в `USD` и `EUR` производится пересчёт по текущему курсу рубля,\n        - Для зарплат, указанных до вычета НДФЛ производится пересчёт на реальную зарплату \"на руки\",\n        - Для отсутствующих зарплат - пропуск.\n    - Создаётся словарь ключевых элементов таблицы,\n        - Массив содержит поля: `{колонки фрейма* -  (см. ниже)}`,\n        - Для полей `From` и `To` происходит перерасчет зарплаты,\n        - Ключевые навыки формируются как перечисляемый список,\n        - Описание вакансий очищается от HTML-тегов с помощью дополнительной функции.\n    - Функция возвращает массив кортежей.\n- Преобразование сырых данных в `DataFrame` для дальнейшего анализа. Результат сохраняется на диск в виде `csv` файла.\n- Анализ `DataFrame` - поиск статстических параметров, поиск мат. ожидания, медианы и т.д от зарплат. Классификация по параметрам.\n- Предсказание зарплат для вакансий, у которых этот параметр не задан.\n- Построение информативных графиков.\n\nПример графика для указанных зарплат:\n\n![Example Salary Plot](img/from_to.png \"Example Salary Plot\")\n\n**Колонки фрейма**:\n\n| Параметр | Тип | Описание    |\n| :-- | :-- | :-- |\n| `Ids`           | `str`    | идентификатор вакансии (формирует ссылку на вакансию) |\n| `Employer`     | `str`    | работодатель |\n| `Name`         | `str`    | название вакансии |\n| `Salary`       | `bool`   | указание зарплаты: `True / False` |\n| `From`         | `float`  | нижний порог зарплаты |\n| `To`           | `float`  | верхний порог зарплаты |\n| `Experience`   | `str`    | опыт работы |\n| `Schedule`     | `str`    | график работы |\n| `Keys`         | `list`   | ключевые навыки |\n| `Description`  | `str`    | описание вакансиии |\n\n*Нижний и верхний порог зарплаты пересчитаны в рубли по текущему курсу валюты. Также для зарплат, указанных до вычета НДФЛ производится пересчёт на реальную зарплату \"на руки\".*\n\nПример наиболее часто используемых ключевых значений:\n\n![Top words in Key / Description](img/most_freq_keys.png \"Top words in [Keys / Description]\")\n\n### Output data\nВыходные данные - таблица в формате `csv`, созданная с помощью фреймворка `pandas`. Дополнительно к этой таблице проводится анализ: поиск мат. ожидания, медианы и т.д от зарплат в зависимости от остальных критериев в таблице (например, от опыта работы). Проводится классификация по различным параметрам.\n\nПример предсказанных зарплат:\n\n![Salaries predicted](img/predicted.png \"Predicted Data\")\n\n[Документация API HeadHunter hh.ru](https://github.com/hhru/api \"Head-Hunter API documentation\")\n____\n\n### Link:\n  * https://habr.com/users/hukenovs/\n\n### Author:\n  * Kapitanov Alexander\n\n### Release:\n  * 2019/08/14.\n\n### License:\n  * GNU GPL 3.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhukenovs%2Fhh_research","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhukenovs%2Fhh_research","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhukenovs%2Fhh_research/lists"}