-
Notifications
You must be signed in to change notification settings - Fork 1
/
sj_vacancies_collector.py
86 lines (74 loc) · 3.1 KB
/
sj_vacancies_collector.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import requests
from main_functions import predict_salary, draw_table, get_vacancies_statistic
import time
from dotenv import load_dotenv
import os
import argparse
def predict_rub_salary_for_superJob(vacancy):
if vacancy["currency"] != "rub":
return None
return predict_salary(vacancy["payment_from"], vacancy["payment_to"])
def collect_superjob_vacancies(keywords, superjob_key):
headers = {"X-Api-App-Id": superjob_key}
vacancies = {}
town_id = 4
profession_id = 48
number_vacancies_on_page = 20
vacancies_number_limit = 500
for word in keywords:
vacancies[word] = []
pages_number = 1
page = 0
while page < pages_number:
params = {
"town": town_id,
"catalogues": profession_id,
"keyword": word,
"page": page,
"count": number_vacancies_on_page
}
try:
page_response = requests.get(
"https://api.superjob.ru/2.0/vacancies/",
headers=headers,
params=params,
)
page_response.raise_for_status()
page_payload = page_response.json()
if page_payload["total"] > vacancies_number_limit:
pages_number = vacancies_number_limit // number_vacancies_on_page
elif page_payload["total"] < number_vacancies_on_page:
pages_number = 1
else:
pages_number = page_payload["total"] // number_vacancies_on_page
page += 1
page_vacancies = page_payload["objects"]
for vacancy in page_vacancies:
vacancies[word].append(vacancy)
time.sleep(0.5)
except requests.exceptions.HTTPError:
time.sleep(1)
return vacancies
def draw_superjob_statistic(languages, superjob_key):
sj_vacancies = collect_superjob_vacancies(languages, superjob_key)
sj_statistic = get_vacancies_statistic(
sj_vacancies, predict_rub_salary_for_superJob
)
return draw_table(sj_statistic, "SuperJob Moscow")
if __name__ == "__main__":
load_dotenv()
superjob_api_key = os.environ["SUPERJOB_API_KEY"]
parser = argparse.ArgumentParser(
description="""Скрипт высчитывает среднюю зарлату по вакансиям разработчиков
в г.Москва на сервисе SuperJob в разрезе языков программирования.
Выводит итоговую статистику в виде таблицы.
Требует получения SUPERJOB_API_KEY, который должен быть указан в переменной .env"""
)
parser.add_argument(
"-l",
"--languages",
nargs="+",
help="список языков программирования для поиска вакансий",
)
args = parser.parse_args()
print(draw_superjob_statistic(args.languages, superjob_api_key))