داكن proxyscrape شعار

Web Scraping For Job Postings – An Ultimate 2024 Guide

بايثون ، كشط ، 04-يناير-20235 دقائق للقراءة
يعد Web Scraping لإعلانات الوظائف اختصارا بديلا للباحثين عن عمل لإنشاء قاعدة بيانات لفرص العمل الحالية. يقول راندستاد إن متوسط البحث عن وظيفة قد يستمر من خمسة إلى ستة أشهر ، من وقت تقديم الطلب حتى شغل المنصب. ماذا لو كان لديك حل يمكن أن يقلل من عبء تصفحك لجميع بوابات الوظائف واختيار الحل المناسب لك؟ 

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

ما هو تجريف الويب لإعلانات الوظائف؟

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

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

[تنويه! يمكن للعديد من مواقع الويب تقييد إلغاء البيانات من صفحاتها. قد يخضع المستخدمون لمشكلات قانونية اعتمادا على مكان وكيفية محاولتهم استخراج المعلومات. لذلك يحتاج المرء إلى توخي الحذر الشديد عند النظر إلى المواقع التي تضم بياناته. على سبيل المثال ، يمانع Facebook و Linked In و Craiglist أحيانا إذا تم إلغاء البيانات من صفحاتهم. لذلك إذا كنت تريد الكشط ، فقم بكشط على مسؤوليتك الخاصة].

ستكون هذه مقالة أساسية للغاية سنرى فيها أساسيات تجريف الويب عن طريق استخراج بعض المعلومات المفيدة المتعلقة بالوظائف المتعلقة ب "علوم البيانات" من indeed.com. سنكتب برنامجا رائعا يقوم بتحديث الوظائف عدة مرات يدويا. بعض المكتبات المفيدة التي ستكون مفيدة للغاية أثناء بناء هذه الكاشطة هي "الطلبات" و "BeautifulSoup".

فهم عنوان URL وبنية الصفحة

أولا ، دعنا نلقي نظرة على صفحة العينة التي سنستخرج منها بالفعل

الطريقة التي يتم بها تنظيم عنوان URL مهمة:

  • ملاحظة يبدأ "Q =" سلسلة الحقل "ماذا" على الصفحة ، ويفصل مصطلحات البحث ب "+" (على سبيل المثال ، البحث عن وظائف "بيانات + عالم")
  • عند تحديد الراتب ، سيتم تحليله بفواصل في رقم الراتب ، وبالتالي فإن بداية الراتب ستسبقها 24٪ ثم الرقم قبل الفاصلة الأولى ، ثم يتم كسره بنسبة 2C ويستمر مع بقية الرقم (أي ٪ 2420٪ 2C000 = 20,000 دولار)
  • ملاحظة "&l=" تبدأ السلسلة الخاصة بالمدينة محل الاهتمام، مع فصل عبارات البحث ب "+" إذا كانت المدينة تتكون من أكثر من كلمة واحدة (على سبيل المثال، "New+York.")
  • ملاحظة "&start =" تلاحظ نتيجة البحث حيث تريد البدء (على سبيل المثال ، ابدأ بالنظر إلى النتيجة 10)

ستكون بنية عنوان URL هذه ذات فائدة كبيرة بينما نواصل بناء الكاشطة وجمع البيانات من صفحات متعددة. 

يمكن لمتصفح Chrome فحص بنية HTML للصفحة بالنقر بزر الماوس الأيمن عليها واستخدام خيار فحص العنصر. ستظهر قائمة على اليمين ، وستعرض أيضا علامات العناصر المتداخلة ، وعندما تضع المؤشر على هذه العناصر ، ستبرز هذا الجزء من الشاشة.  

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

الشروع في العمل مع مكشطة

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

طلبات الاستيراد
استيراد BS4
من bs4 استيراد شوربة جميلة
استيراد الباندا ك PD
وقت الاستيراد

سنستهدف أولا الصفحة الواحدة لسحب كل جزء من المعلومات التي نريدها ،

URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10" #conducting طلب عنوان URL المذكور أعلاه:
الصفحة = الطلبات. الحصول على (URL)
#specifying التنسيق المطلوب ل "الصفحة" باستخدام محلل HTML - وهذا يسمح ل Python بقراءة المكونات المختلفة للصفحة ، بدلا من معاملتها كسلسلة واحدة طويلة.
حساء = حساء جميل (صفحة نص ، "html.parser")
#printing الحساء بتنسيق شجرة أكثر تنظيما يجعل القراءة أسهل (soup.prettify ())

يؤدي استخدام prettify إلى تسهيل الحصول على نظرة عامة على ترميز HTML للصفحة ويوفر مخرجات مثل هذه ،

 الآن جميع المعلومات الموجودة على صفحة اهتمامنا موجودة في "حساء" متغير. يتعين علينا البحث أكثر في الكود للتكرار من خلال العديد من العلامات والعلامات الفرعية لالتقاط المعلومات المطلوبة.

الحصول على العناصر الأساسية للبيانات

خمس نقاط رئيسية لكل إعلان وظيفة هي ،

  1. المسمى الوظيفي.
  2. اسم الشركة.
  3. مكان.
  4. راتب.
  5. ملخص الوظيفة.

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

الحصول على المسمى الوظيفي

As can be seen, the entirety of each job posting is under <div> tags, with an attribute “class” = “row result.”

Further, we could also see that job titles are under <a> tags, with the attribute “title = (title)”. One can see the value of the tag’s attribute with tag[“attribute”], so I can use it to find each posting’s job title.

إذا لخصنا ، فإن الوظيفة التي سنراها تتضمن الخطوات الثلاث التالية ،

  1. Pulling out all the <div> tags with class including “row”.
  2. Identifying <a> tags with attribute “data-tn-element”:”jobTitle”
  3. For each of these <a> tags, find attribute values “title”
def extract_job_title_from_result(soup): 
  jobs = []
  for div in soup.find_all(name="div", attrs={"class":"row"}):
    for a in div.find_all(name="a", attrs={"data-tn-element":"jobTitle"}):
      jobs.append(a["title"])
  return(jobs)
extract_job_title_from_result(soup)

سينتج عن هذا الرمز ناتج مثل هذا ،

الحصول على اسم الشركة

Getting company names can be a bit tricky because most of them are appearing in <span> tags, with “class”:” company”.  They are also housed in <span> tags with “class”:” result-link-source”.

سنستخدم بيانات if / else لاستخراج معلومات الشركة من كل من هذه الأماكن. لإزالة المسافات البيضاء حول أسماء الشركات عند إخراجها ، سنستخدم inputting.strip() في النهاية.

def extract_company_from_result(soup): 
 companies = []
 for div in soup.find_all(name="div", attrs={"class":"row"}):
   company = div.find_all(name="span", attrs={"class":"company"})
   if len(company) &gt; 0:
    for b in company:
     companies.append(b.text.strip())
   else:
    sec_try = div.find_all(name="span", attrs={"class":"result-link-source"})
    for span in sec_try:
      companies.append(span.text.strip())
 return(companies)
 
extract_company_from_result(soup)

الحصول على الموقع

Locations are located under the <span> tags. Span tags are sometimes nested within each other, such that the location text may sometimes be within “class”:”location” attributes, or nested in “itemprop”:”addressLocality”. However a simple for loop can examine all span tags for text and retrieve the necessary information.

def extract_location_from_result(soup): 
  locations = []
  spans = soup.findAll('span', attrs={'class': 'location'})
  for span in spans:
    locations.append(span.text)
  return(locations)
extract_location_from_result(soup)

الحصول على الراتب

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

Some salaries are under <nobr> tags, while others are under <div> tags, “class”:”sjcl” and are under separate div tags with no attributes. Try/except statement can be helpful while extracting this information. 

def extract_salary_from_result(soup): 
  salaries = []
  for div in soup.find_all(name="div", attrs={"class":"row"}):
    try:
      salaries.append(div.find('nobr').text)
    except:
      try:
        div_two = div.find(name="div", attrs={"class":"sjcl"})
        div_three = div_two.find("div")
        salaries.append(div_three.text.strip())
      except:
        salaries.append("Nothing_found")
  return(salaries)
extract_salary_from_result(soup)

الحصول على ملخص الوظيفة

المهمة النهائية هي الحصول على ملخص الوظيفة. ومع ذلك ، لا يمكن الحصول على ملخصات الوظائف لكل منصب معين لأنها غير مضمنة في HTML من صفحة إنديد معينة. يمكننا الحصول على بعض المعلومات حول كل وظيفة مما يتم توفيره. يمكننا استخدام السيلينيوم لهذا الغرض.

But let’s first try this using python. Summaries are located under <span> tags. Span tags are nested within each other such that the location text is within “class”:” location” tags or nested in “itemprop”:” adressLocality”. However, using a simple for loop can examine all span tags for text to retrieve the necessary information.

أسئلة مكررة

1. Why is it necessary to scrape job details?
هناك ما يكفي من بوابات الوظائف التي يمكنها إعلامك بالوظائف التي تطابق ملفك الشخصي. ومع ذلك ، فإن وجود حل تجريف الوظائف سيوفر لك قائمة كاملة بالوظائف والوصف كقاعدة بيانات مفيدة. سيتيح لك ذلك الحصول على رؤية أفضل لجميع فرص العمل في مكان واحد.
2. How can a proxy help in scraping job details?
عادة ما يواجه تجريف الويب تحديات معينة مثل كتل IP والكتل الجغرافية والسرعة المحدودة. كما أن كشط الوظائف من بوابات الوظائف سيواجه مثل هذه التحديات. لتجاوز كل هذه المشاكل ، يمكن أن تساعدك عناوين الوكيل في عناوين IP للموقع المطلوب وضمان عدم الكشف عن هويتك
3. What are the python libraries required to scrape job details?
Requests, BeautifulSoup, and Pandas are quite common python libraries to scrape job-related data from websites. Request library is the most common python library used to send web requests, while BeautifulSoup is responsible for parsing data, and Pandas library will help with the data structure operations.
مقالات ذات صلة

في المخص:

في هذه المقالة ، رأينا ما هو تجريف الويب وكيف يمكن أن يكون مفيدا في حياتنا اليومية من خلال أخذ مثال عملي لكشط بيانات الوظيفة من صفحات الويب الخاصة ب Indeed. يرجى ملاحظة أن النتائج التي تحصل عليها قد تكون مختلفة عن هذه النتائج لأن الصفحات ديناميكية ، لذلك تستمر المعلومات في التغير بمرور الوقت. 

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

إذا كنت تبحث عن خدمات بروكسي ، فلا تنس إلقاء نظرة على ProxyScrapeالوكلاء السكنية والمتميزة.