نقوم بتحليل السيرة الذاتية للمحامين على hh.ru بدون واجهة برمجة تطبيقات

Hh.ru هو موقع جيد لا يحتاج إلى تقديم إضافي. البحث عن الوظائف الشاغرة فيه ملائم وممتع. ومع ذلك ، من المثير للاهتمام في بعض الأحيان أن نرى من صاحب العمل:

  • كيف تبدو السيرة الذاتية في الطلب المستهدف؟
  • كما ترون سيرتك الذاتية في الإصدار ،
  • نظرًا لأن السيرة الذاتية "تتراجع" بمرور الوقت ، من الضروري أيضًا جمع ملخص للمحامين الآخرين لبناء إحصاءات مصغرة.

على الرغم من حقيقة أن hh لها واجهة برمجة تطبيقات خاصة بها وموثقة جيدًا ، إلا أن الوصول إليها يخضع لحراسة دقيقة.

يتم الوصول إلى واجهة برمجة التطبيقات كما هو الحال في العديد من واجهات برمجة التطبيقات الاجتماعية. الشبكات - من خلال التسجيل الأولي للتطبيق في حساب الويب للحساب ، في هذه الحالة ، صاحب العمل على hh.ru/ployer :



للوصول إلى هناك ، تحتاج إلى التسجيل كصاحب عمل ، قم بتأكيد المعلومات المتعلقة بانتماء المؤسسة (سوف يتصلون بك) ثم اتبع الرابط: dev.hh.ru
ومع ذلك ، في هذه المرحلة ، العمل مع واجهة برمجة التطبيقات ليس متاحًا بالكامل بعد ، لأن التطبيق لتسجيل التطبيق على سمو .ru يمكن اعتباره حتى 20 يوم عمل . طويل.

لذلك ، سنعمل بدون api ، باستخدام قدرات الثعبان وإطار السيلينيوم.

في السيلينيوم ، نقوم بتغذية طلب url نيابة عن صاحب العمل ، حيث ستكون هناك الوظائف التالية:

  • المصطلحات الرئيسية: المحامي ؛
  • المجال المهني: أي ؛
  • المنطقة: موسكو،
  • الراتب: لا تظهر السيرة الذاتية بدون راتب ؛
  • التعليم: لا يهم.
  • الجنسية: أي ؛
  • تصريح العمل: أي ؛
  • العمر والصورة: فقط مع الصورة ؛
  • الجنس: لا يهم.
  • فرز: حسب تاريخ التعديل ؛
  • الإخراج: لمدة شهر ؛
  • العرض على الصفحة: 100 سيرة ذاتية.

على الرغم من حقيقة أنه سيكون هناك العديد من النتائج ، إلا أنه سيتم توفير 5000 سيرة ذاتية فقط. القيود المفروضة على صاحب العمل العامل الحر.

في الكود ، هذا هو:

استيراد الوحدات وإدخال الموقع
from selenium import webdriver
import time,csv
browser = webdriver.Firefox()
time.sleep (5) #   -  
browser.get ('https://hh.ru/employer')
time.sleep (5)


التفويض على الموقع
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 وكلمة المرور - استبدل بالبريد الإلكتروني لصاحب العمل وكلمة المرور - بكلمة المرور.

كتلة الكتابة 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']
                         )) 


كتلة التحليل
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)


تكرار من 50 صفحة مع استئناف
resume_get()
x=0

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


* علق شظايا لأولئك الذين يريدون إضافة معلومات إلى التحديد.

بعد العمل على البرنامج وتحميل النتائج إلى excel ، نحصل على الجدول:



كيف تجد سيرتك الذاتية؟ أسهل طريقة هي تصفية عمر المرشحين.

كيف ننظر إلى مكان ظهور الملخص بعد الفترة التاسعة؟ قد البرنامج من خلال القدر nth من الوقت وتجد نفسك مرة أخرى. سيكون الموضع الذي انخفض فيه السيرة الذاتية في الرسم البياني هو الموضع في القضية ، حيث يجمع البرنامج جميع السير الذاتية عند الطلب.

وأخيرًا ، رسم بياني إحصائي صغير حول السيرة الذاتية للمحامين ، "سكان موسكو" (2000 يستأنف).





ملاحظة. يستأنف دون تحديث الموقع 2000 موقف يوميًا بناءً على طلب "شركة + محامٍ".

برنامج - تحميل
جدول بيانات Excel -تحميل

All Articles