Analizamos el currículum de abogados en hh.ru sin api

Hh.ru es un buen sitio que no necesita presentación adicional. La búsqueda de vacantes es conveniente y prosaico. Sin embargo, a veces es más interesante ver desde el empleador:

  • ¿Cómo se ve un currículum en una solicitud dirigida?
  • como puede ver su propio currículum en la emisión,
  • Como un currículum se "hunde" con el tiempo, también es necesario recopilar un resumen de otros abogados para crear mini estadísticas.

A pesar de que hh tiene su propia API y está bien documentada, el acceso a ella está cuidadosamente vigilado.

El acceso a la API se lleva a cabo como en la situación con muchas API sociales. redes: a través del registro preliminar de la aplicación en la cuenta web de la cuenta, en este caso, el empleador en hh.ru/employer :



Para llegar allí, debe registrarse como empleador, confirmar la información sobre la afiliación de la organización (lo llamarán) y luego seguir el enlace: dev.hh.ru
Sin embargo, en esta etapa, trabajar con api aún no está completamente disponible, ya que la aplicación para registrar la aplicación en hh .ru puede considerarse hasta 20 días hábiles . Largo.

Por lo tanto, trabajaremos sin api, utilizando las capacidades de python y el marco de selenio.

En selenium alimentamos la solicitud de URL en nombre del empleador, en la que habrá los siguientes puestos:

  • Palabras clave: abogado;
  • Área profesional: Cualquiera;
  • Región: Moscú,
  • Salario: no mostrar currículum sin salario;
  • Educación: no importa;
  • Ciudadanía: Cualquiera;
  • Permiso de trabajo: cualquiera;
  • Edad y foto: solo con foto;
  • Género: no importa;
  • Ordenar: por fecha de modificación;
  • Salida: por un mes;
  • Mostrar en la página: 100 hojas de vida.

A pesar del hecho de que habrá muchos resultados, solo 5.000 hojas de vida estarán disponibles. Restricción para un empleador que trabaja gratis.

En código, esto es:

Importe módulos e ingrese al sitio
from selenium import webdriver
import time,csv
browser = webdriver.Firefox()
time.sleep (5) #   -  
browser.get ('https://hh.ru/employer')
time.sleep (5)


Autorización en el sitio
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)


ejemplo@yandex.ru y contraseña - reemplace con el correo electrónico del empleador, contraseña - con la contraseña.

Bloque de escritura 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']
                         )) 


Bloque de análisis
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)


Iteración de paginación de 50 páginas con currículum
resume_get()
x=0

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


* fragmentos comentados para aquellos que desean agregar información a la selección.

Después de elaborar el programa y cargar los resultados en Excel, obtenemos la tabla:



¿Cómo encontrar su currículum? La forma más fácil es filtrar la edad de los candidatos.

¿Cómo mirar dónde apareció el resumen después del enésimo período de tiempo? Conduzca el programa a través de la enésima cantidad de tiempo y vuelva a encontrarse. La posición en la que el currículum cayó en el gráfico será la posición en el tema, ya que el programa recopila secuencialmente todos los currículums a pedido.

Finalmente, un pequeño gráfico estadístico sobre el currículum de los abogados, "Moscovitas" (currículums de 2000).





PD. Reanudar sin actualizar el sitio se hunde para 2000 puestos por día a petición de "Corporate + abogado".

Programa - descargar
hoja de cálculo Excel -descargar

All Articles