
Uma vez, tornou-se interessante para mim, mas e se você tentar analisar as vagas e redigir algumas delas? Descubra quem é mais pago, quem é mais procurado e muito mais.
Como fonte de dados, usei o conhecido HeadHunter. Os trabalhos deste mês de maio foram coletados e processados. Apenas por um mês, porque a API não permite que você obtenha mais.
Coleta de dados
A API do HeadHunter possui excelente documentação, localizada no repositório . As solicitações devem ser feitas no domínio https://api.hh.ru/ com o User-Agent
instalado, de preferência no formato _/_ (__)
(algumas vezes outras versões do User-Agent
, mas se o servidor não gostar de algo, ele retornará um erro )
A lógica da coleção é muito simples, então eu a implementei no bash usando cURL e jq . No entanto, quero compartilhar algumas nuances.
Paginação
Para procurar vagas por vários parâmetros, existe um ponto final GET /vacancies
.
curl -A 'irenica (https://irenica.com/)' 'https://api.hh.ru/vacancies'
Os resultados da pesquisa serão divididos em páginas pelas quais o parâmetro per_page
é responsável pelo tamanho (20 por padrão e 100 no máximo). Você pode selecionar uma página específica especificando o parâmetro da page
(a numeração começa em 0).
As informações do campo de serviço de pages
retornadas com vagas indicarão o número total de páginas do resultado.
Com isso, você pode facilmente iterar em todas as páginas:
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")"
Dados completos do trabalho
No entanto, os resultados da pesquisa contêm apenas parte dos dados do trabalho. Para obter tudo, é necessário fazer uma solicitação separada para o terminal do formulário GET /vacancies/id_
.
Os dados parciais do trabalho estão localizados no campo de items
dos resultados da pesquisa. Primeiro, coletaremos deles o ID da vaga:
declare vacanciesIds="$(echo "$page" | jq -r '.items[].id')"
Em seguida, solicitamos informações completas sobre as respectivas vagas individualmente:
for vacancyId in $vacanciesIds; do declare url="https://api.hh.ru/vacancies/$vacancyId" declare vacancy="$(curl -A 'irenica (https://irenica.com/)' "$url")"
Ignorar limite de pesquisa
A API do HeadHunter possui um recurso - não importa quantos sejam encontrados, será retornado um máximo de 2000. Nesse caso, o número real encontrado também será retornado no campo found
dos resultados da pesquisa. Graças a isso, você pode saber com certeza se recebeu todos os dados solicitados ou se há perdas.
Para contornar essa limitação, vim com o seguinte. Ao pesquisar, você pode especificar o período em que as vagas de interesse foram publicadas (através dos date_to
date_from
e date_to
, que aceitam uma data no formato ISO 8601). Você pode fazer uma pequena diferença e classificar todos os resultados em partes: afinal, quanto menor o intervalo de tempo, menos vagas você consegue publicar para ele.
Vale ressaltar que as vagas publicadas apenas no último mês são devolvidas. Portanto, não faz mais sentido definir o intervalo.
Para iterar ao longo de períodos de tempo, o último é melhor representado como tempo do Unix:
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)"
Processamento Salarial
Para coletar estatísticas, foi necessário agrupar as vagas de acordo com determinados critérios. No bash, isso já era problemático, então eu usei o Python.
A lógica da coleção não é nada de especial - o acúmulo de dados em uma matriz associativa, a classificação e a saída em CSV. No entanto, novamente algumas nuances.
Garfo de salário
Note-se que o salário é apresentado na forma de dois números - o mínimo e o máximo, e qualquer um deles pode estar ausente.
Como para a análise era necessário ter um número, decidi usar a borda inferior e, somente se estiver ausente, a superior.
salary = None if vacancy['salary']: if vacancy['salary']['to']: salary = vacancy['salary']['to'] if vacancy['salary']['from']: salary = vacancy['salary']['from']
Taxas de Câmbio
Os salários nas vagas podem ser indicados em diferentes moedas e podem ter taxas diferentes. A API do HeadHunter possui um terminal GET /dictionaries
contém todos os valores predefinidos necessários. As taxas de câmbio são apresentadas no campo de currency
. Por conveniência, seria melhor colocar a lista em uma matriz associativa, onde a chave é o código da letra da moeda:
currencies = {} dictionaries = requests.get('https://api.hh.ru/dictionaries').json() for currency in dictionaries['currency']: currencies[currency['code']] = currency['rate']
Agora, durante o processamento, será fácil converter todos os salários em uma moeda:
salary /= currencies[vacancy['salary']['currency']]
Contabilidade de imposto de renda pessoal
Em algumas vagas, o salário é indicado antes do pagamento do imposto de renda pessoal, em algumas - depois. O campo gross
fala sobre uma opção específica: é true
no primeiro caso e false
no segundo.
Decidi transferir todos os salários para a opção após impostos:
if vacancy['salary']['gross']: salary -= salary * 0.13
Análise de Resultados
E agora é hora de mostrar os números.
Trabalho remoto
Provavelmente, muitos dos que leram este post gostariam de trabalhar em um site remoto. Mas como você pode ver, o trabalho em casa em nosso país ainda não é muito citado. O salário é muito menor, o número de vagas é significativamente menor. E, portanto, havia menos opções para o candidato.
E isso é bastante estranho, porque em muitas profissões e muitas empresas (de acordo com as especificidades das tarefas) a presença de uma pessoa no escritório não é necessária. Mas este é um argumento eterno.
Nome | Média salarial | Salário mínimo | Salário máximo | Número |
---|
Pessoal em casa | 112536 | 10977 | 130.000 | 19 |
Tecnologia da informação, Internet, Telecomunicações | 55225 | 1000 | 300.000 | 2828 |
Alta gerência | 47687 | 9474 | 100.000 | 23 |
Extração de matéria-prima | 46579 | 20000 | 90898 | 80 |
Instalação e serviço | 45439 | 11874 | 69600 | 9 |
Serviço público, organizações sem fins lucrativos | 44911 | 20000 | 90.000 | 19 |
Equipe de trabalho | 44218 | 9499 | 67860 | 37. |
Produção | 42388 | 2372 | 100.000 | 236 |
Construção, imobiliário | 39896 | 70 | 110000 | 329 |
Transportes, Logística | 37662 | 9490 | 100.000 | 223 |

Candidatos a Deficientes
No entanto, há um número ainda menor de vagas - para pessoas com deficiência. E isso é completamente ilógico - mesmo que os empregadores não desejem ser removidos, mas entre os que estão prontos para isso, por que tão poucos que pensam em pessoas com deficiência? Se você não se importa com o que a pessoa está em três fusos horários, que diferença faz para você, ela é capaz, por exemplo, de andar?
Muitos de vocês podem estar familiarizados com pessoas com deficiência. Eu também, e me perguntei como seria difícil para eles encontrar um emprego e com o que poderiam contar.
Nome | Média salarial | Salário mínimo | Salário máximo | Número |
---|
Serviço público, organizações sem fins lucrativos | 69675 | 8700 | 90.000 | 8 |
Alta gerência | 48705 | 30000 | 82425 | 15 |
Tecnologia da informação, Internet, Telecomunicações | 45321 | 4350 | 200.000 | 1050 |
Ciência, educação | 45056 | 3158 | 90.000 | 376 |
Compras | 43591 | 15.000 | 80.000 | 9 |
Construção, imobiliário | 42148 | 22 | 250000 | 210. |
Produção | 40969 | 10.000 | 130500 | 189 |
Contabilidade, contabilidade gerencial, finanças corporativas | 36387 | 2610 | 113100 | 125 |
Advogados | 34308 | 2610 | 160.000 | 131 |
Segurança | 33414 | 22 | 90.000 | 178 |

Alunos
Todos começamos com algo, nomeadamente com uma procura de emprego, sem qualquer experiência. Decidi avaliar a situação com posições abertas para esses candidatos.
O número de vagas é encorajador para um emprego rápido. E eu não sei o quão realista é obter o salário máximo, mas você pode até viver de uma forma média.
Nome | Média salarial | Salário mínimo | Salário máximo | Número |
---|
Aconselhamento | 62601 | 1500 | 221850 | 2504 |
Construção, imobiliário | 55855 | 20 | 949989 | 6455 |
Alta gerência | 50826 | 11310 | 400.000 | 111 |
Extração de matéria-prima | 38192 | 8000 | 100.000 | 328 |
Segurança | 34617 | 3954 | 100.000 | 5844 |
Medicina, Farmácia | 34475 | 450 | 200.000 | 11776 |
Transportes, Logística | 33600 | 500 | 150.000 | 8000 |
Ciência, educação | 31426 | 1100 | 124510 | 1660 |
Vendas | 30444 | 1 | 350.000 | 52566 |
Instalação e serviço | 30360 | 8264 | 80.000 | 381 |

Top geral
E agora o mais interessante: quem é pago mais? Classificou todas as vagas encontradas sem filtros.
Obviamente, essa é a alta gerência. Quem duvidaria disso.
Um fato curioso: se você prestar atenção ao salário médio em todas as tabelas, poderá ver que não é muito diferente.
Nome | Média salarial | Salário mínimo | Salário máximo | Número |
---|
Alta gerência | 78789 | 150 | 2.000.000 | 2408 |
Extração de matéria-prima | 61699 | 8000 | 180.000 | 2302 |
Aconselhamento | 59797 | 1500 | 500.000 | 3762 |
Tecnologia da informação, Internet, Telecomunicações | 52777 | 26 | 684804 | 25900 |
Construção, imobiliário | 48587 | 20 | 949989 | 33229 |
Produção | 42007 | 1 | 261000 | 27269 |
Equipe de trabalho | 41203 | 25 | 200.000 | 43079 |
Negócio de carro | 38555 | 20 | 824254 | 9269 |
Instalação e serviço | 38412 | 25 | 180.000 | 2390 |
Compras | 37846 | 50. | 261000 | 2658 |

Mulher de limpeza
E aqui está a maneira mais fácil: por que estudar por 5 anos, se você pode apenas lavar o escritório? Abaixo está o resultado da filtragem das vagas superiores para a consulta "limpador *".
E se você entrar em vários escritórios e chegar à noite por algumas horas para limpar? Então você pode viver bastante luxuosamente. Vamos considerar isso um truque de vida.
Nome | Média salarial | Salário mínimo | Salário máximo | Número |
---|
Alta gerência | 63000 | 40.000 | 87000 | 8 |
Marketing, publicidade, relações públicas | 50.000 | 50.000 | 50.000 | 6 |
Extração de matéria-prima | 45000 | 45000 | 45000 | 3 |
Gestão de RH, treinamentos | 33246 | 7908 | 87000 | 58. |
Contabilidade, contabilidade gerencial, finanças corporativas | 32000 | 30000 | 35.000 | 10 |
Segurança | 31507 | 20000 | 70.000 | 6 |
Vendas | 29696 | 4737 | 55.000 | 159 |
Construção, imobiliário | 29024 | 413 | 80.000 | 73 |
Transportes, Logística | 24987 | 10990 | 45000 | 26 |
Negócio de carro | 24465 | 7124 | 45000 | 61 |

Cidades principais
Finalmente, decidi verificar o número de vagas abertas por cidade. Os primeiros lugares não são surpreendentes, mas existem posições curiosas e até inesperadas.
Nome | Número |
---|
Moscovo | 31137 |
São Petersburgo | 11745 |
Minsk | 7608 |
Almaty | 4386 |
Kiev | 3398 |
Ekaterinburg | 3182 |
Novosibirsk | 3097 |
Kazan | 3066 |
Ufa | 2980 |
Nizhny Novgorod | 2876 |

Repositório
Todo o código do artigo, com aprimoramentos e instruções, está disponível no repositório .