Nous analysons le CV des avocats sur hh.ru sans API

Hh.ru est un bon site qui n'a pas besoin de soumission supplémentaire. La recherche de postes vacants est pratique et prosaïque. Cependant, il est parfois plus intéressant de voir de la part de l'employeur:

  • À quoi ressemble un CV sur une demande ciblée?
  • comme vous pouvez le voir dans l'émission,
  • Comme un CV «s'affaisse» au fil du temps, il est également nécessaire de collecter un résumé des collègues avocats pour construire des mini-statistiques.

Malgré le fait qu'il possède son propre api et qu'il soit bien documenté, son accès est soigneusement gardé.

L'accès à l'API se fait comme dans la situation avec de nombreux API sociaux. réseaux - par l'enregistrement préalable de la demande dans le compte Web du compte, dans ce cas, l'employeur à hh.ru/employer :



Pour y accéder, vous devez vous inscrire en tant qu'employeur, confirmer les informations sur l'affiliation de l'organisation (ils vous appelleront) puis suivre le lien: dev.hh.ru
Cependant, à ce stade, travailler avec api n'est pas encore entièrement disponible, car la demande d'enregistrement de l'application sur hh .ru peut être considéré jusqu'à 20 jours ouvrables . Longue.

Par conséquent, nous travaillerons sans API, en utilisant les capacités de python et du framework sélénium.

Dans le sélénium, nous alimentons la demande d'URL au nom de l'employeur, dans laquelle il y aura les postes suivants:

  • Mots clés: avocat;
  • Domaine professionnel: Any;
  • Région: Moscou,
  • Salaire: Ne montrez pas votre CV sans salaire;
  • Éducation: peu importe;
  • Citoyenneté: Tout;
  • Permis de travail: Tout;
  • Âge et photo: uniquement avec photo;
  • Sexe: peu importe;
  • Trier: par date de modification;
  • Sortie: pendant un mois;
  • Afficher à la page: 100 CV.

Malgré le fait qu'il y aura de nombreux résultats, seulement 5 000 CV seront disponibles. Restriction pour un employeur libre.

En code, c'est:

Importez des modules et entrez sur le site
from selenium import webdriver
import time,csv
browser = webdriver.Firefox()
time.sleep (5) #   -  
browser.get ('https://hh.ru/employer')
time.sleep (5)


Autorisation sur le site
a = browser.find_element_by_css_selector('.bloko-icon_cancel')
a.click()
time.sleep (2)
a=browser.find_element_by_css_selector('div.supernova-navi-item:nth-child(6) > a:nth-child(1)')
a.click()
time.sleep (3)    
emailElem = browser.find_element_by_css_selector('.HH-AuthForm-Login')
emailElem.click()
time.sleep (1)
emailElem.send_keys('example@yandex.ru')    
time.sleep (1)
passElem = browser.find_element_by_css_selector('.HH-AuthForm-Password')
passElem.click()
time.sleep (1)
passElem.send_keys('password')
passElem.submit()
time.sleep (3)


example@yandex.ru et mot de passe - remplacer par l'e-mail de l'employeur, mot de passe - par le mot de passe.

Bloc d'écriture CSV
def write_csv(data):
    with open('hh.csv','a',encoding='utf8') as f:
        writer=csv.writer(f)
        writer.writerow((data['name'],
                         data['age'],
                         data['salary'],                         
                         data['stag'],
                         #data['post_job_place'],
                         data['resume_link'],
                         data['photo_big']
                         #data['job_places'],
                         #data['education'],
                         #data['address'],
                         #data['update']
                         )) 


Bloc d'analyse
def resume_get():    
    # 
    a=browser.find_elements_by_class_name('resume-search-item__content-wrapper') # 100 
    #len(a)
    #resume-search-item__description-content -  
    for i in a:
        b=i.find_element_by_class_name('resume-search-item__header')
        name=b.find_element_by_class_name('resume-search-item__name').text # 
        age=b.find_element_by_class_name('resume-search-item__fullname').text # 52 
        salary=b.find_element_by_class_name('resume-search-item__compensation').text # 40000 .
        stag=i.find_elements_by_class_name('resume-search-item__description-content')[0].text # '7   8 '
        resume_link=i.find_element_by_class_name('resume-search-item__name').get_attribute('href') #  
        #post_job_place=i.find_elements_by_class_name('resume-search-item__description-content')[1].text #.  
        #job_places=b.find_elements_by_class_name('resume-search-item__description-content')[1:3] # 
        #education=i.find_elements_by_class_name('resume-search-item__description-content')[-1].text # 
        #photo_small=browser.find_element_by_class_name('resume-userpic').find_element_by_class_name('resume-userpic__photo').get_attribute('src') #   
        try:
            photo_big=i.find_element_by_class_name('bloko-modal-content').find_element_by_tag_name('img').get_attribute('src') #  -
        except:
            photo_big=''

     
        #update=i.find_element_by_class_name('output__addition').text #  
        data={    'name':name,
                  'age':age,
                  'salary':salary,
                  'stag':stag,                  
                  #'post_job_place':post_job_place,
                  'resume_link':resume_link,
                  'photo_big':photo_big
                  #'job_places':job_places,
                  #'education':education,
                  #'address':address,
                  #'update':update
                  }
        #print(data)
        write_csv(data)


Itération de pagination de 50 pages avec CV
resume_get()
x=0

while x!=50:
    browser.get (url+'&page='+str(x+1))
    time.sleep(7)
    resume_get()
    x+=1


* fragments commentés pour ceux qui souhaitent ajouter des informations à la sélection.

Après avoir élaboré le programme et chargé les résultats dans Excel, nous obtenons le tableau:



Comment trouver votre CV? Le moyen le plus simple est de filtrer l'âge des candidats.

Comment voir où le résumé est apparu après la n-ième période? Conduisez le programme pendant la nième durée et retrouvez-vous. La position sur laquelle le CV a chuté dans le graphique sera la position dans le problème, car le programme collecte séquentiellement tous les CV sur demande.

Enfin, un petit graphique statistique sur le curriculum vitae des avocats, «Moscovites» (2000 reprend).





ps. Reprendre sans mise à jour le site s'affaisse pour 2000 postes par jour à la demande de "Corporate + avocat".

Programme - télécharger la
feuille de calcul Excel -Télécharger

All Articles