-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhh_statistics.py
65 lines (56 loc) · 2.12 KB
/
hh_statistics.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from itertools import count
import requests
from predict_salary import predict_salary
def get_hh_vacancies(language: str) -> list:
hh_api_url = "https://api.hh.ru"
total_vacancies = []
for page in count():
period_days = 30
per_page = 100
max_count_results = 2000
payload = {
"text": f"программист {language}",
"area": "1", # Москва
"period": period_days,
"currency": "RUR",
"per_page": per_page,
"page": page
}
response = requests.get(f"{hh_api_url}/vacancies", params=payload)
response.raise_for_status()
vacancies = response.json()
total_vacancies.append(vacancies)
if page > int(vacancies["found"] / per_page) or page >= (max_count_results / per_page) - 1:
break
return total_vacancies
def get_hh_page_statistics(total_vacancies: list) -> dict:
sum_salaries = 0
vacancies_processed = 0
vacancies_found = 0
for page_vacancies in total_vacancies:
vacancies_found = page_vacancies["found"]
for vacancy in page_vacancies["items"]:
if not vacancy["salary"] or vacancy["salary"]["currency"] != "RUR":
continue
from_salary = vacancy["salary"]["from"]
to_salary = vacancy["salary"]["to"]
expected_salary = predict_salary(from_salary, to_salary)
sum_salaries += expected_salary
vacancies_processed += 1
try:
average_salary = int(sum_salaries / vacancies_processed)
except ZeroDivisionError:
average_salary = 0
language_statistics = {
"vacancies_found": vacancies_found,
"vacancies_processed": vacancies_processed,
"average_salary": average_salary
}
return language_statistics
def get_hh_statistics(languages: list):
general_statistics = {}
for language in languages:
total_vacancies = get_hh_vacancies(language)
language_statistics = get_hh_page_statistics(total_vacancies)
general_statistics[language] = language_statistics
return general_statistics