
Einmal wurde es für mich interessant, aber was ist, wenn Sie versuchen, die offenen Stellen zu analysieren und einige Spitzen zu erstellen? Finden Sie heraus, wer am meisten bezahlt wird, wer am gefragtesten ist und vieles mehr.
Als Datenquelle habe ich den bekannten HeadHunter verwendet. Jobs für diesen Mai wurden gesammelt und bearbeitet. Nur für einen Monat, da Sie mit der API nicht mehr erhalten können.
Datenerfassung
Die HeadHunter-API verfügt über eine hervorragende Dokumentation, die sich im Repository befindet . Anfragen sollten an die Domäne https://api.hh.ru/ mit installiertem User-Agent
werden, vorzugsweise in der Form _/_ (__)
(manchmal _/_ (__)
andere Versionen des User-Agent
, aber wenn dem Server etwas nicht gefällt, wird ein Fehler zurückgegeben )
Die Auflistungslogik ist sehr einfach, daher habe ich sie mit cURL und jq auf bash implementiert . Ich möchte jedoch einige Nuancen teilen.
Paginierung
Um nach verschiedenen Parametern nach offenen Stellen zu suchen, gibt es einen Endpunkt GET /vacancies
.
curl -A 'irenica (https://irenica.com/)' 'https://api.hh.ru/vacancies'
Die Suchergebnisse werden in Seiten unterteilt, für die der Parameter per_page
für die Größe verantwortlich ist (standardmäßig 20 und maximal 100). Sie können eine bestimmte Seite auswählen, indem Sie den page
angeben (die Nummerierung beginnt bei 0).
Das Feld mit den mit offenen Stellen zurückgegebenen Serviceinformationen gibt die Gesamtzahl der Seiten des Ergebnisses an.
Mit dieser Funktion können Sie problemlos alle Seiten durchlaufen:
declare -ii=0 while true; do declare url="https://api.hh.ru/vacancies?per_page=100&page=$i" declare page="$(curl -A 'irenica (https://irenica.com/)' "$url")"
Vollständige Auftragsdaten
Die Suchergebnisse enthalten jedoch nur einen Teil der Auftragsdaten. Um alles zu erhalten, müssen Sie eine separate Anfrage für den Endpunkt des Formulars GET /vacancies/id_
.
Teilauftragsdaten befinden sich im Feld items
der Suchergebnisse. Zuerst werden wir von ihnen die freie ID sammeln:
declare vacanciesIds="$(echo "$page" | jq -r '.items[].id')"
Dann fordern wir individuell vollständige Informationen zu den jeweiligen Stellenangeboten an:
for vacancyId in $vacanciesIds; do declare url="https://api.hh.ru/vacancies/$vacancyId" declare vacancy="$(curl -A 'irenica (https://irenica.com/)' "$url")"
Suchlimit-Bypass
Die HeadHunter-API verfügt über eine Funktion: Unabhängig davon, wie viele gefunden wurden, werden maximal 2000 zurückgegeben. In diesem Fall wird die tatsächlich gefundene Anzahl auch im Feld " found
der Suchergebnisse zurückgegeben. So können Sie sicher wissen, ob Sie alle angeforderten Daten erhalten haben oder ob es Verluste gibt.
Um diese Einschränkung zu umgehen, habe ich mir Folgendes ausgedacht. Bei der Suche können Sie angeben, wie lange Stellen von Interesse veröffentlicht wurden (über die date_to
date_from
und date_to
, die ein Datum im ISO 8601-Format akzeptieren). Sie können eine kleine Lücke schließen und alle Ergebnisse in solchen Stücken sortieren: Je kürzer das Zeitintervall, desto weniger Stellen können Sie dafür veröffentlichen.
Es ist zu beachten, dass nur im letzten Monat veröffentlichte Stellen zurückgegeben werden. Daher ist es nicht sinnvoll, den Bereich weiter einzustellen.
Um über Zeiträume zu iterieren, wird letzteres am besten als Unix-Zeit dargestellt:
declare -i startTime=$(date -d '-1 month' +%s) declare -i endTime=$(date -d now +%s) while ((startTime <= endTime)); do declare -i intervalEnd=$((startTime + 60*60)) declare startTimeIso="$(date -d @$startTime +%FT%T)" declare intervalEndIso="$(date -d @$intervalEnd +%FT%T)"
Gehaltsabwicklung
Um Statistiken zu sammeln, mussten offene Stellen nach bestimmten Kriterien gruppiert werden. Bei Bash war das schon problematisch, also habe ich Python verwendet.
Die Erfassungslogik ist nichts Besonderes - die Akkumulation von Daten in einem assoziativen Array, Sortieren und Ausgeben in CSV. Allerdings nochmal ein paar Nuancen.
Gehaltsgabel
Es ist zu beachten, dass das Gehalt in Form von zwei Zahlen angegeben wird - der minimalen und der maximalen, und jede von ihnen kann fehlen.
Da für die Analyse eine Nummer erforderlich war, entschied ich mich für den unteren Rand und nur dann für den oberen Rand, wenn dieser fehlt.
salary = None if vacancy['salary']: if vacancy['salary']['to']: salary = vacancy['salary']['to'] if vacancy['salary']['from']: salary = vacancy['salary']['from']
Währungskurse
Gehälter in offenen Stellen können in verschiedenen Währungen angegeben werden und sie können unterschiedliche Sätze haben. Die HeadHunter-API verfügt über einen GET /dictionaries
Endpunkt, der alle erforderlichen vordefinierten Werte enthält. Wechselkurse werden im currency
. Der Einfachheit halber ist es besser, die Liste in ein assoziatives Array zu stellen, wobei der Schlüssel der Buchstabencode der Währung ist:
currencies = {} dictionaries = requests.get('https://api.hh.ru/dictionaries').json() for currency in dictionaries['currency']: currencies[currency['code']] = currency['rate']
Während der Verarbeitung ist es jetzt einfach, alle Gehälter in eine Währung umzurechnen:
salary /= currencies[vacancy['salary']['currency']]
Persönliche Einkommensteuerbuchhaltung
In einigen offenen Stellen wird das Gehalt vor der Zahlung der Einkommensteuer angegeben, in einigen nach. Das gross
spricht von einer bestimmten Option: Es ist im ersten Fall true
und im zweiten false
.
Ich habe beschlossen, alle Gehälter auf die Option nach Steuern zu übertragen:
if vacancy['salary']['gross']: salary -= salary * 0.13
Ergebnisanalyse
Und jetzt ist es Zeit, die Zahlen zu zeigen.
Fernarbeit
Wahrscheinlich möchten viele derjenigen, die diesen Beitrag lesen, an einem entfernten Standort arbeiten. Aber wie Sie sehen, ist die Arbeit von zu Hause in unserem Land noch nicht sehr zitiert. Das Gehalt ist viel niedriger, die Zahl der offenen Stellen ist deutlich geringer. Daher hatte der Antragsteller weniger Wahlmöglichkeiten.
Und das ist seltsam genug, denn in vielen Berufen und Unternehmen (entsprechend den Besonderheiten der Aufgaben) ist die Anwesenheit einer Person im Büro überhaupt nicht erforderlich. Dies ist jedoch ein ewiges Argument.
Name | Gehaltsdurchschnitt | Mindestgehalt | Gehalt maximal | Nummer |
---|
Heimpersonal | 112536 | 10977 | 130.000 | 19 |
Informationstechnologie, Internet, Telekommunikation | 55225 | 1000 | 300.000 | 2828 |
Top Management | 47687 | 9474 | 100.000 | 23 |
Rohstoffgewinnung | 46579 | 20000 | 90898 | 80 |
Installation und Service | 45439 | 11874 | 69600 | 9 |
Öffentlicher Dienst, gemeinnützige Organisationen | 44911 | 20000 | 90.000 | 19 |
Arbeitspersonal | 44218 | 9499 | 67860 | 37 |
Produktion | 42388 | 2372 | 100.000 | 236 |
Bau, Immobilien | 39896 | 70 | 110000 | 329 |
Transport, Logistik | 37662 | 9490 | 100.000 | 223 |

Antragsteller für Behinderungen
Es gibt jedoch noch weniger offene Stellen - für Menschen mit Behinderungen. Und das ist völlig unlogisch - obwohl Arbeitgeber nicht entfernt werden wollen, aber unter denen, die dazu bereit sind, warum so wenige, die an Menschen mit Behinderungen denken? Wenn es Ihnen egal ist, was die Person in drei Zeitzonen ist, welchen Unterschied macht es für Sie, kann sie zum Beispiel laufen?
Viele von Ihnen kennen möglicherweise Menschen mit Behinderungen. Ich auch, und ich fragte mich, wie schwer es für sie war, einen Job zu finden, und worauf sie sich verlassen konnten.
Name | Gehaltsdurchschnitt | Mindestgehalt | Gehalt maximal | Nummer |
---|
Öffentlicher Dienst, gemeinnützige Organisationen | 69675 | 8700 | 90.000 | 8 |
Top Management | 48705 | 30000 | 82425 | 15 |
Informationstechnologie, Internet, Telekommunikation | 45321 | 4350 | 200.000 | 1050 |
Wissenschaft, Bildung | 45056 | 3158 | 90.000 | 376 |
Beschaffung | 43591 | 15.000 | 80.000 | 9 |
Bau, Immobilien | 42148 | 22 | 250000 | 210 |
Produktion | 40969 | 10.000 | 130500 | 189 |
Buchhaltung, Management Accounting, Unternehmensfinanzierung | 36387 | 2610 | 113100 | 125 |
Anwälte | 34308 | 2610 | 160.000 | 131 |
Sicherheit | 33414 | 22 | 90.000 | 178 |

Studenten
Wir alle beginnen mit etwas, nämlich mit einer Jobsuche, ohne Erfahrung. Ich beschloss, die Situation mit offenen Stellen für solche Kandidaten zu bewerten.
Die Zahl der offenen Stellen ist ermutigend für eine schnelle Beschäftigung. Und ich weiß nicht, wie realistisch es ist, das maximale Gehalt zu erreichen, aber man kann sogar irgendwie von durchschnittlichen Zahlen leben.
Name | Gehaltsdurchschnitt | Mindestgehalt | Gehalt maximal | Nummer |
---|
Beratung | 62601 | 1500 | 221850 | 2504 |
Bau, Immobilien | 55855 | 20 | 949989 | 6455 |
Top Management | 50826 | 11310 | 400.000 | 111 |
Rohstoffgewinnung | 38192 | 8000 | 100.000 | 328 |
Sicherheit | 34617 | 3954 | 100.000 | 5844 |
Medizin, Pharmazie | 34475 | 450 | 200.000 | 11776 |
Transport, Logistik | 33600 | 500 | 150.000 | 8000 |
Wissenschaft, Bildung | 31426 | 1100 | 124510 | 1660 |
Vertrieb | 30444 | 1 | 350.000 | 52566 |
Installation und Service | 30360 | 8264 | 80.000 | 381 |

Insgesamt top
Und jetzt das Interessanteste: Wer wird am meisten bezahlt? Sortiert alle gefundenen Stellen ohne Filter.
Dies ist natürlich das Top-Management. Wer würde es bezweifeln.
Eine merkwürdige Tatsache: Wenn Sie auf das Durchschnittsgehalt in allen Tabellen achten, können Sie sehen, dass es nicht so viel anders ist.
Name | Gehaltsdurchschnitt | Mindestgehalt | Gehalt maximal | Nummer |
---|
Top Management | 78789 | 150 | 2.000.000 | 2408 |
Rohstoffgewinnung | 61699 | 8000 | 180.000 | 2302 |
Beratung | 59797 | 1500 | 500.000 | 3762 |
Informationstechnologie, Internet, Telekommunikation | 52777 | 26 | 684804 | 25900 |
Bau, Immobilien | 48587 | 20 | 949989 | 33229 |
Produktion | 42007 | 1 | 261000 | 27269 |
Arbeitspersonal | 41203 | 25 | 200.000 | 43079 |
Autogeschäft | 38555 | 20 | 824254 | 9269 |
Installation und Service | 38412 | 25 | 180.000 | 2390 |
Beschaffung | 37846 | 50 | 261000 | 2658 |

Putzfrau
Und hier ist der einfachste Weg: Warum 5 Jahre studieren, wenn man nur das Büro waschen kann? Unten sehen Sie das Ergebnis der Filterung der Top-Stellen für die Abfrage "Cleaner *".
Was ist, wenn Sie in mehrere Büros kommen und abends für ein paar Stunden zur Reinigung kommen? So können Sie ganz luxuriös leben. Wir werden dies als einen Lebenshack betrachten.
Name | Gehaltsdurchschnitt | Mindestgehalt | Gehalt maximal | Nummer |
---|
Top Management | 63000 | 40.000 | 87000 | 8 |
Marketing, Werbung, PR | 50.000 | 50.000 | 50.000 | 6 |
Rohstoffgewinnung | 45000 | 45000 | 45000 | 3 |
Personalmanagement, Schulungen | 33246 | 7908 | 87000 | 58 |
Buchhaltung, Management Accounting, Unternehmensfinanzierung | 32000 | 30000 | 35.000 | 10 |
Sicherheit | 31507 | 20000 | 70.000 | 6 |
Vertrieb | 29696 | 4737 | 55.000 | 159 |
Bau, Immobilien | 29024 | 413 | 80.000 | 73 |
Transport, Logistik | 24987 | 10990 | 45000 | 26 |
Autogeschäft | 24465 | 7124 | 45000 | 61 |

Top Städte
Schließlich habe ich mich entschlossen, die Anzahl der offenen Stellen nach Stadt zu überprüfen. Die ersten Plätze sind nicht überraschend, aber dann gibt es merkwürdige und sogar unerwartete Positionen.
Name | Nummer |
---|
Moskau | 31137 |
Sankt Petersburg | 11745 |
Minsk | 7608 |
Almaty | 4386 |
Kiew | 3398 |
Jekaterinburg | 3182 |
Nowosibirsk | 3097 |
Kasan | 3066 |
Ufa | 2980 |
Nizhny Novgorod | 2876 |

Repository
Der gesamte Code aus dem Artikel mit Verbesserungen und Anweisungen ist im Repository verfügbar.