انتقل إلى المحتوى

دليلك خطوة بخطوة لاستخراج البيانات من الواقع

مرحبًا يا من هناك! هل تتطلع إلى استخراج قوائم الوظائف من الواقع؟ لقد جئت إلى المكان المناسب.

يعد إنديد أحد أكبر محركات البحث عن الوظائف على الويب، مع أكثر من 250 مليون زوار فريدون شهريا. إنها مجموعة هائلة من البيانات حول إعلانات الوظائف والرواتب وملفات تعريف الشركة والمزيد.

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

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

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

وفي النهاية، سوف تقوم بجمع إعلانات الوظائف بالفعل كالمحترفين. دعونا نحفر!

لماذا تتخلص من قوائم الوظائف بالفعل؟

قبل أن نتعامل مع بعض أكواد بايثون، دعونا نتحدث عنها لماذا قد ترغب في استخراج البيانات من الواقع في المقام الأول.

فيما يلي بعض الأفكار:

  • أبحاث السوق – تحليل اتجاهات نشر الوظائف لتحديد المهارات أو الأدوار المتزايدة في الطلب. في الواقع لديه بيانات عن ملايين من الفتحات في جميع الصناعات.

  • ذكاء تنافسي – تعرف على الرواتب والمزايا التي تقدمها الشركات لأدوار مماثلة. مفيد عند قياس حزم التعويضات الخاصة بك.

  • محركات البحث عن الوظائف – أنشئ لوحات وظائف مخصصة باستخدام بيانات الواقع التي تمت تصفيتها لكلمات رئيسية أو مواقع محددة.

  • أدوات التوظيف – تتبع الوظائف الشاغرة الجديدة التي تتوافق مع مهارات المرشح لعرض الوظائف ذات الصلة.

  • استئناف التحليل – استخراج الكلمات الرئيسية والمهارات من الوصف الوظيفي لتقديم اقتراحات لتحسين السير الذاتية والرسائل التعريفية.

هذه مجرد أمثلة قليلة - مع البيانات المنظمة الغنية حول إعلانات الوظائف، فإن الاحتمالات لا حصر لها!

الآن دعونا نلقي نظرة على كيفية استخراج تلك البيانات فعليًا باستخدام تجريف الويب.

قبل التعمق في البرمجة، أريد أن أتطرق سريعًا إلى شرعية تجريف الويب. أعرف أن بعض الناس لديهم مخاوف هنا.

الإجابة المختصرة هي: استخراج البيانات العامة من الواقع قانوني تماما في معظم الحالات، طالما أنك تتبع بعض القواعد الأساسية:

  • الوصول إلى الصفحات العامة فقط - لا تحاول استخراج بيانات المستخدم الخاصة أو تسجيلات الدخول.

  • لا تفرط في تحميل خوادم إنديد عن طريق الحذف بقوة شديدة. اتبع ممارسات الزحف المهذبة.

  • الالتزام بشروط خدمة إنديد. أنها لا تحظر على وجه التحديد تجريف الويب.

  • تجنب نسخ مقتطفات كبيرة من النص حرفيًا لاحترام حقوق الطبع والنشر. إعادة الصياغة على ما يرام.

  • لا تقم بإعادة نشر أي بيانات خاصة أو شخصية أو حساسة تم حذفها.

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

بالطبع، ما زلت أوصي باستشارة محامٍ إذا كانت لديك أية مخاوف نظرًا لاختلاف القوانين. ولكن يمكنك أن تتخلص من الثقة في الواقع طالما أنك تحافظ على الأخلاق!

حسنًا، دعنا نتعمق في الأشياء الممتعة – الكود الفعلي!

تجريف قوائم الواقع باستخدام بايثون

عند استخراج مواقع كبيرة مثل الواقع، تعد لغة Python خيارًا رائعًا بفضل المكتبات المشابهة الطلبات, حساء جميل و عنصر السيلينيوم.

سأرشدك عبر البرنامج النصي إلى:

  • استخراج قوائم الوظائف التي تطابق عمليات البحث عن الكلمات الرئيسية والموقع

  • تحليل التفاصيل مثل المسميات الوظيفية والرواتب والأوصاف

  • أتمتة ترقيم الصفحات لجلب جميع القوائم عبر صفحات متعددة

هيا بنا نبدأ!

استيراد مكتبات

سوف نستخدم الطلبات لجلب الصفحات، حساء جميل للتحليل، الوقت: لخنق، و الباندا لتخزين البيانات:

import requests
from bs4 import BeautifulSoup
import time
import pandas as pd

طلبات و BeautifulSoup كلها أنت في الحقيقة يحتاج. لكن Pandas يساعد في إدارة البيانات، بينما يخنق الوقت الطلبات.

تحديد معلمات البحث

أولاً، دعونا نحدد قوائم الوظائف التي نريدها. تحديد الكلمات الرئيسية والموقع والمرشحات الأخرى:

keywords = "Remote Software Engineer"
location = "United States" 
salary_min = 100000

يستهدف هذا وظائف البرمجيات عن بعد ذات الأجور المرتفعة في الولايات المتحدة. التكيف مع المعايير المطلوبة.

جلب صفحة نتائج البحث

بعد تعيين المعلمات، سنطلب عنوان URL، ونمرر كلماتنا الرئيسية وموقعنا:

BASE_URL = "https://www.indeed.com/jobs?" 

params = {
  ‘q‘: keywords,
  ‘l‘: location,
  ‘minSalary‘: salary_min,
  ‘remotejob‘: ‘remote‘ # Filter remote jobs  
}

print(f‘Fetching job listings for {keywords} in {location}...‘)

res = requests.get(BASE_URL, params=params)
res.raise_for_status() # Raise exception for 4xx/5xx

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

تحليل النتائج باستخدام BeautifulSoup

سنقوم بعد ذلك بتحليل HTML لصفحة نتائج البحث لاستخراج بيانات القائمة عالية المستوى:

soup = BeautifulSoup(res.text, ‘html.parser‘)

listings = [] # List to store listings

for div in soup.find_all(‘div‘, class_=‘job_seen_beacon‘):

  title = div.find(‘h2‘).text.strip()

  company = div.find(‘span‘, class_=‘companyName‘).text.strip()

  location = div.find(‘div‘, class_=‘companyLocation‘).text.strip()

  # Append listing data    
  listings.append({
    ‘title‘: title,
    ‘company‘: company, 
    ‘location‘: location
  })

هنا نقوم بتحديد موقع كل قائمة div، احصل على الحقول الرئيسية مثل العنوان والشركة، وقم بتخزينها في موقعنا listings قائمة.

التعامل مع ترقيم الصفحات

في الواقع يقسم النتائج عبر صفحات متعددة. سنحتاج إلى التكرار من خلال كل:

# Track page number 
current_page = 0

while True:

  # Increment page
  current_page += 1 

  print(f‘Scraping page {current_page}...‘)

  # Build URL for next page
  next_page_url = BASE_URL + f‘&start={current_page*10}‘  

  # Fetch page HTML
  res = requests.get(next_page_url, params=params)

  # Parse HTML
  soup = BeautifulSoup(res.text, ‘html.parser‘)   

  # Return if last page
  if not soup.find(‘a‘, {‘aria-label‘: ‘Next‘}):
    print(‘Reached last page!‘)
    break

  # Extract listings
  for div in soup.find_all(...):
    # Extract listing data

  # Sleep to throttle requests  
  time.sleep(3) 

print(f‘Scraped {len(listings)} listings‘)

نقوم هنا بزيادة رقم الصفحة بشكل مستمر، وجلب الصفحة التالية، واستخراج القوائم، والتكرار حتى الوصول إلى الصفحة الأخيرة.

إضافة قصيرة time.sleep() يساعد الخانق على تجنب إرهاق خوادم الواقع.

كشط تفاصيل القائمة

لقد استخرجنا حتى الآن بيانات عالية المستوى مثل العناوين والشركات. للحصول على تفاصيل مثل الرواتب والأوصاف، سنقوم بمسح كل عنوان URL للقائمة:

from selenium import webdriver

driver = webdriver.Chrome()

# Loop through listings
for listing in listings:

  print(f‘Getting details for {listing["title"]}‘)

  # Load listing URL
  url = listing[‘url‘]  
  driver.get(url)

  # Extract key fields
  desc = driver.find_element_by_id(‘jobDescriptionText‘).text
  salary = driver.find_element_by_class_name(‘salary-snippet‘).text

  listing[‘desc‘] = desc
  listing[‘salary‘] = salary

  # Sleep to throttle
  time.sleep(2)

driver.quit()  

هنا يوفر السيلينيوم متصفحًا كاملاً لعرض صفحات جافا سكريبت الثقيلة. نقوم بتحميل كل عنوان URL، واستخراج حقول إضافية مثل الوصف والراتب.

برو تلميح: النظر في استخدام خدمة الوكيل لتجنب حظر IP عند استخدام السيلينيوم على نطاق واسع.

وهذا كل شيء! من خلال هذه الخطوات، يمكنك استخراج الآلاف من قوائم الوظائف من إنديد تلقائيًا.

والنتيجة النهائية هي بيانات مهمة منظمة يمكنك تحليلها أو تصديرها إلى أدوات مثل Excel. دعونا نلقي نظرة على بعض الأمثلة بعد ذلك.

ماذا يمكنك أن تفعل ببيانات إنديد المسروقة؟

الآن بعد أن أصبح بإمكاننا استخراج قوائم الواقع، ما الذي يمكننا فعله بالفعل بهذه البيانات؟

فيما يلي بعض الأفكار:

تصدير إلى Excel للتحليل

df = pandas.DataFrame(listings)
df.to_excel(‘indeed_listings.xlsx‘, index=False)

تعمل Pandas على تسهيل تصدير النتائج إلى Excel. وهذا يتيح التصفية القوية والجداول المحورية والصيغ.

في الواقع البيانات في Excel

يمكنك تحليل الاتجاهات عبر المواقع والرواتب والمهارات والمزيد.

بناء قواعد بيانات البحث عن الوظائف

import sqlite3

# Connect to SQLite database
conn = sqlite3.connect(‘jobs.db‘)

# Create table
conn.execute(‘‘‘
  CREATE TABLE jobs (
    title TEXT,
    company TEXT, 
    description TEXT,
    salary REAL  
  );
‘‘‘)

# Insert listings into database
for listing in listings:
  conn.execute("""
    INSERT INTO jobs VALUES (
      ?, ?, ?, ?
    )""", (listing[‘title‘], listing[‘company‘], 
            listing[‘desc‘], listing[‘salary‘]))

conn.commit()
conn.close()

يوفر SQLite قاعدة بيانات بسيطة لتخزين القوائم للبحث المخصص. التكامل مع Flask لإنشاء لوحة الوظائف الخاصة بك!

أرسل القوائم ذات الصلة بالبريد الإلكتروني إلى المرشحين

import smtplib
from email.message import EmailMessage

# Connect to SMTP server 
smtp = smtplib.SMTP(‘smtp.domain.com‘)

for listing in listings:

  # Check if listing matches candidate skills  

  if match:

    msg = EmailMessage()
    msg[‘Subject‘] = f‘New job for you - {listing["title"]}‘  
    msg[‘From‘] = ‘[email protected]‘
    msg[‘To‘] = ‘[email protected]‘
    msg.set_content(listing[‘desc‘])

    # Send listing to candidate
    smtp.send_message(msg)

smtp.quit()

تعمل لغة Python على تسهيل إرسال القوائم الجديدة للمرشحين عبر البريد الإلكتروني تلقائيًا والتي تتوافق مع مهاراتهم واهتماماتهم.

هذه مجرد عينة صغيرة - مع بيانات عن ملايين القوائم، فإن الاحتمالات لا حصر لها!

الآن دعونا نلقي نظرة على تشغيل هذه المكشطة تلقائيًا.

جدولة الخدوش اليومية في الواقع

على الرغم من أن استخراج إنديد في الوقت الفعلي أمر مفيد، إلا أن الإعداد أكثر قيمة الخدوش الآلية والمقررة للحفاظ على بياناتك حديثة.

فيما يلي خياران جيدان لتشغيل المكشطة وفقًا لجدول زمني متكرر ثابت:

كرون وظائف

إحدى الطرق البسيطة لأتمتة نصوص Python هي cron، وهي أداة مساعدة قياسية لنظام التشغيل Linux.

أضف إدخالاً مثل هذا ليتم تشغيله يوميًا في الساعة 8 صباحًا:

0 8 * * * python /home/user/indeedScraper.py

يمكنك جدولة التكرارات المعقدة. لكن cron يفتقر إلى الإبلاغ في حالة فشل الخدوش.

منصات القشط

للحصول على جدولة وأتمتة أكثر قوة، أوصي باستخدام منصة كشط مخصصة مثل Scrapy or أبي.

توفر هذه أتمتة للمتصفح والوكيل للتعامل مع اختبارات CAPTCHA والكتل وجافا سكريبت. ولديهم جدولة وظائف كرون سهلة ومدمجة.

يمكنك أيضًا الحصول على تنبيهات عبر البريد الإلكتروني وتحليلات الأداء وخيارات التكامل. إنهم حقًا يزيلون الصداع من الأتمتة!

إليك مقارنة سريعة:

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

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

دعونا نلخص

تعلمت في هذا الدليل:

  • لماذا يعد تجريف إنديد مفيدًا لأبحاث السوق والبحث عن الوظائف وأدوات التوظيف.

  • كيف استخراج القوائم عن طريق محاكاة استعلامات البحث في بايثون.

  • أفضل الممارسات مثل تقييد الطلبات واستخدام الوكلاء لتجنب الحظر.

  • كيف تحليل التفاصيل مثل الرواتب والأوصاف من صفحات القائمة.

  • خيارات الأتمتة مثل cron ومنصات التجميع المخصصة للحفاظ على تحديث بياناتك.

من المفترض أن تمنحك نماذج التعليمات البرمجية أعلاه نموذجًا لبدء استخراج بيانات الواقع الخاصة بك. لا تتردد في تعديله والبناء عليه لحالة الاستخدام الخاصة بك!

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

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

اسمحوا لي أن أعرف إذا كان لديك أي أسئلة أخرى! يسعدني دائمًا الدردشة أكثر حول أفضل ممارسات تجريف الويب.

حظًا سعيدًا في مشروع تجريف الواقع الخاص بك!

الانضمام إلى محادثة

لن يتم نشر عنوان بريدك الإلكتروني. الحقول المشار إليها إلزامية *