Kami menganalisis resume pengacara di hh.ru tanpa api

Hh.ru adalah situs bagus yang tidak membutuhkan pengiriman tambahan. Mencari lowongan di tempat itu nyaman dan membosankan. Namun, terkadang lebih menarik untuk dilihat dari majikan:

  • Seperti apa tampilan resume pada permintaan yang ditargetkan?
  • karena Anda dapat melihat resume Anda sendiri dalam penerbitan,
  • Sebagai resume "melorot" dari waktu ke waktu, itu juga perlu untuk mengumpulkan ringkasan dari sesama pengacara untuk membangun statistik mini.

Terlepas dari kenyataan bahwa hh memiliki api sendiri dan didokumentasikan dengan baik, akses ke sana dijaga dengan cermat.

Akses ke api dilakukan seperti dalam situasi dengan banyak api sosial. jaringan - melalui pendaftaran awal aplikasi di akun web akun, dalam hal ini, pemberi kerja di hh.ru/employer :



Untuk sampai di sana Anda harus mendaftar sebagai majikan, konfirmasikan informasi tentang afiliasi organisasi (mereka akan menghubungi Anda) dan kemudian ikuti tautan: dev.hh.ru
Namun, pada tahap ini, bekerja dengan api belum sepenuhnya tersedia, karena aplikasi untuk mendaftarkan aplikasi di hh .ru dapat dianggap hingga 20 hari kerja . Panjang.

Karenanya, kami akan bekerja tanpa api, menggunakan kemampuan python dan kerangka selenium.

Dalam selenium, kami memenuhi permintaan url atas nama pemberi kerja, di mana akan ada posisi berikut:

  • Kata kunci: pengacara;
  • Bidang profesional: Apa saja;
  • Wilayah: Moskow,
  • Gaji: Jangan tampilkan resume tanpa gaji;
  • Pendidikan: Tidak masalah;
  • Kewarganegaraan: Apa saja;
  • Izin Kerja: Apa saja;
  • Usia dan foto: Hanya dengan foto;
  • Gender: Tidak masalah;
  • Sortir: Berdasarkan tanggal diubah;
  • Output: Selama sebulan;
  • Tunjukkan pada halaman: 100 resume.

Terlepas dari kenyataan bahwa akan ada banyak hasil, hanya 5.000 resume akan tersedia. Batasan untuk majikan yang bekerja gratis.

Dalam kode, ini adalah:

Impor modul dan masuk ke situs
from selenium import webdriver
import time,csv
browser = webdriver.Firefox()
time.sleep (5) #   -  
browser.get ('https://hh.ru/employer')
time.sleep (5)


Otorisasi di situs
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 dan kata sandi - ganti dengan email majikan, kata sandi - dengan kata sandi.

Blok tulis 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']
                         )) 


Blok parsing
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)


Iterasi pagination 50 halaman dengan resume
resume_get()
x=0

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


* Mengomentari fragmen untuk mereka yang ingin menambahkan informasi ke seleksi.

Setelah mengerjakan program dan memuat hasilnya ke excel, kami mendapatkan tabel:



Bagaimana menemukan resume Anda? Cara termudah adalah dengan menyaring usia kandidat.

Bagaimana cara melihat di mana ringkasan muncul setelah periode waktu ke-n? Drive program melalui jumlah waktu ke-n dan temukan diri Anda lagi. Posisi penurunan resume dalam bagan akan menjadi posisi dalam masalah, karena program secara berurutan mengumpulkan semua resume berdasarkan permintaan.

Akhirnya, grafik-statistik kecil pada resume pengacara, "Moskow" (2000 resume).





ps. Lanjutkan tanpa memperbarui sags situs untuk 2.000 posisi per hari atas permintaan "Corporate + pengacara".

Program - unduh
spreadsheet Excel -unduh

All Articles