اگر می خواهید بیاموزید که چگونه در بازار کار در حال تحول با از بین بردن سایت های آگهی کار مانند Indeed.com حرکت کنید، این راهنما برای شما مناسب است.

Job Scraper چیست؟

در عصر دیجیتال، ابزارهایی به نام Job Board Scraper (یا فقط Job Scrapers) برای افرادی که به دنبال خودکارسازی هستند ضروری شده اند. process جمع آوری داده ها از وب سایت های هیئت شغلی

تابلوهای شغلی پلتفرم های آنلاینی هستند که فرصت های شغلی بسیاری را از بخش های مختلف به نمایش می گذارند. برخی از نمونه های محبوب عبارتند از Indeed.com و ZipRecruiter.com. این تابلوها نبض بازار کار هستند که منعکس کننده روندهای شغلی فعلی، نیازهای شرکت و مهارت های مورد تقاضا هستند.

هدف اصلی Job Scraper جمع‌آوری دقیق جزئیاتی مانند عناوین شغلی، توضیحات، نام شرکت، مکان‌ها و گاهی اوقات داده‌های حقوق و دستمزد از فهرست‌ها است. روی این سایت ها این اطلاعات یک هدف دوگانه را دنبال می کند: با ارائه یک نمای کلی از بازار به کارجویان در جستجوی شغل کمک می کند و تحلیلگران همچنین می توانند از آن برای ردیابی روندهای شغلی و پویایی بازار استفاده کنند.

آنچه در اینجا خواهید آموخت

این آموزش از زبان برنامه نویسی پایتون، محبوب ترین و همه کاره ترین ابزار برای کارهای خراش دادن وب استفاده می کند. اکوسیستم غنی کتابخانه‌های پایتون، مانند BeautifulSoup و Scrapy، آن را به انتخابی ایده‌آل برای توسعه Job Scrapers کارآمد و مؤثر تبدیل می‌کند.

اگر در پایتون تازه کار هستید، می توانید دوره مقدماتی پایتون را بررسی کنید روی فوق مهارت، جایی که من به عنوان یک متخصص در آن مشارکت می کنم.

در پایان این راهنما، شما برای ساختن Job Scraper خود مجهز خواهید شد و درک عمیق تری از چشم انداز جستجوی کار و روش پیمایش آن با استفاده از بینش های مبتنی بر داده خواهید داشت.

چه شما یک جوینده کار باشید که به دنبال کسب برتری در جستجوی شغل خود هستید، یک تحلیلگر داده که روندهای بازار کار را ردیابی می کند، یا یک توسعه دهنده علاقه مند به جنبه های فنی اسکراپینگ وب، این آموزش دانش و مهارت های ارزشمندی را ارائه می دهد.

چارچوب های پایتون خوب برای کار

چندین چارچوب و کتابخانه پایتون وجود دارد که می توانید از آنها برای خراش دادن جزئیات کار از وب سایت لیست مشاغل استفاده کنید. آنها هستند:

  • سوپ زیبا
  • خراشیده
  • سلنیوم
  • پیپتیر

ما از Pyppeteer برای این مقاله استفاده خواهیم کرد زیرا دارای مزایای کلیدی نسبت به کتابخانه های دیگر است. اگر هنوز نام Pyppeteer را نشنیده اید، این پورت پایتون فریم ورک محبوب Puppeteer است. می توانید اطلاعات بیشتری در مورد Puppeteer از وب سایت رسمی کسب کنید.

Pyppeteer اکثر قابلیت های Puppeteer را دارد و برای برنامه نویسان Python نوشته شده است. در اینجا برخی از مفیدترین ویژگی های آن آورده شده است:

  • Pyppeteer یک مرورگر واقعی را کنترل می کند. بسیاری از وب سایت ها از ورود روبات ها به وب سایت های خود جلوگیری می کنند. از آنجایی که Pyppeteer از یک مرورگر واقعی استفاده می‌کند، می‌توانید از بسیاری از مسدود کردن‌های مشابه جلوگیری کنید.
  • با Pyppeteer می‌توانید به‌طور برنامه‌نویسی اقدامات کاربر مانند کلیک‌ها، ارسال‌های فرم و ورودی‌های صفحه‌کلید را تقلید کنید. همانطور که در این مقاله انجام خواهیم داد، این امکان پیمایش در جریان های پیچیده کاربر را فراهم می کند.
  • از آنجا که Pyppeteer یک مرورگر کامل را اجرا می کند، ذاتاً از ویژگی های وب مدرن مانند انتخابگرهای CSS، XPath و WebSockets پشتیبانی می کند. اگرچه ما فقط به برخی از این ویژگی های مدرن برای این مقاله نیاز داریم، اما بهتر است خراش دادن با چنین ابزاری را یاد بگیرید، زیرا احتمالاً هنگام انجام کارهای خراش دادن پیچیده تر به آن ویژگی ها نیاز خواهید داشت.

در اینجا چیزی است که ما پوشش خواهیم داد:

  1. پیش نیازها
  2. چگونه با Pyppeteer شروع کنیم
  3. روش استخراج لیست مشاغل با Pyppeteer
  4. روش نوشتن کد اسکرپینگ
  5. مراحل بعدی چیست؟

پیش نیازها

تنها پیش نیاز این آموزش نصب پایتون است روی ماشین شما اگر هنوز نیاز به انجام این کار دارید، ادامه دهید و پایتون را از وب سایت رسمی نصب کنید، و شما آماده هستید تا ادامه مقاله را ادامه دهید.

پیشنهاد می‌کنیم بخوانید:  روش نوشتن تست های واحد در پایتون – با نمونه کد تست

چگونه با Pyppeteer شروع کنیم

یک محیط مجازی ایجاد کنید

قبل از شروع با Pyppeteer، اجازه دهید یک محیط مجازی برای این پروژه ایجاد کنیم.

python -m venv env

این دستور یک پوشه جدید به نام env در فهرست پروژه شما ایجاد می کند که حاوی یک نصب جداگانه پایتون است.

باید محیط مجازی را فعال کنید. در ویندوز با استفاده از دستور زیر می توانید محیط را فعال کنید:

.\env\Scripts\activate

در MacOS و Linux، باید این کار را با استفاده از دستور زیر انجام دهید:

source env/bin/activate

Pyppeteer را نصب کنید

با محیط مجازی فعال می توانیم Pyppeteer را با استفاده از آن نصب کنیم pip، مدیر بسته. وقتی پایتون را نصب می‌کنید، Pip قبلاً نصب شده است.

pip install pyppeteer

پس از اجرای دستور بالا، pip Pyppeteer و وابستگی های آن را دانلود و نصب می کند.

به یاد داشته باشید که Pyppeteer نسخه اخیر Chromium سازگار با نسخه API مورد استفاده خود را دانلود خواهد کرد.

فرض کنید قبلاً یک نصب محلی Chrome/Chromium دارید و می‌خواهید Pyppeteer از آن استفاده کند. در این صورت می توانید تنظیم کنید PYPPETEER_CHROMIUM_REVISION متغیر محیطی به یک رشته خالی قبل از نصب Pyppeteer. با این کار Pyppeteer از دانلود Chromium جلوگیری می کند.

export PYPPETEER_CHROMIUM_REVISION=""
pip install pyppeteer

با این حال، تنظیم متغیرهای محیطی متفاوت است روی پنجره ها. برای این کار باید از دستور زیر استفاده کنید:

set PYPPETEER_CHROMIUM_REVISION=
pip install pyppeteer

روش استخراج لیست مشاغل با Pyppeteer

داده های هدف را شناسایی کنید روی تابلوهای کار

قبل از نوشتن کد اسکرپینگ، وب سایتی را که قصد دارید خراش دهید را بررسی کنید.

از وب سایت های هیئت شغلی مانند Indeed.com و ZipRecruiter.com دیدن کنید. را بازرسی کنید page عناصری که در آن جزئیات کار نمایش داده می شود (راست کلیک کنید روی را page و در اکثر مرورگرها “Inspect” را انتخاب کنید). به ساختار HTML و نام کلاس عناصر حاوی عناوین شغلی، توضیحات، نام شرکت، مکان‌ها و سایر اطلاعات مرتبط توجه کنید.

در این مقاله، روش خراشیدن Indeed.com را یاد خواهید گرفت. به Indeed.com بروید، خانه زیر را مشاهده خواهید کرد page:

QYl6P-y9Y_lvg-q2hhskJC6Z2g3Oj-qDNgHVTZLqttIR-veSHt_9zyrK_od-e93zNEfUF7DvOoJRqYobRVEWVQJYF5TqRT37EWzBnlxHVTZLqttIR-veSHt_9zyrK_od-e93zNEfUF7DvOoJRqYobRVEWVQJYF5TqRT37EWzBnlxAZhUXLxLN C1j7SY-QvXI
در واقع خانه page

دارای دکمه جستجو با دو فیلد ورودی است. می توانید عنوان شغل را در قسمت ورودی اول و کشور را در قسمت ورودی دوم تایپ کنید.

بیایید برای عنوان شغل “مهندس نرم افزار” و برای کشور “USA” را تایپ کنیم، سپس روی “جستجو” کلیک کنیم. سپس به یک جدید هدایت خواهید شد page که شامل تمام مشاغل مربوط به مهندسان نرم افزار در ایالات متحده است. اکنون می‌توانیم جزئیات کار را از این تغییر مسیر حذف کنیم page.

بنابراین، چه مراحلی برای خودکارسازی این کار وجود دارد process?

  • یک نمونه مرورگر را باز کنید.
  • به Indeed.com بروید.
  • “مهندس نرم افزار” را به اولین فیلد ورودی اضافه کنید.
  • “USA” را به قسمت ورودی دوم اضافه کنید.
  • روی دکمه “جستجو” کلیک کنید.

برای انجام مراحل 3 و 4، باید صفحه وب را بررسی کنیم و مقادیر ویژگی منحصر به فرد آن عناصر HTML را پیدا کنیم.

هنگام بررسی pageبا کد منبع HTML، متوجه خواهید شد که شناسه فیلد ورودی عنوان شغلی “text-input-what” است و شناسه فیلد ورودی دوم، جایی که مکان را وارد می کنید، “text-input-where” است. “

بعد از اینکه روی “جستجو” کلیک کردیم، به صفحه جدید هدایت می شویم page.

S6KI65uTgQ2Sox-W35VbA1mviQ77hjYlPBumjnas1SVNdlqVKCig8gnt7ULwTY8s2TRMBzgBwI8AbJ2_4dkUaxr4tMa1tQPPWKsb3txLPGYseDqPzpVTyz WVME
در واقع page

روی این page، هدف ما استخراج جزئیاتی مانند عنوان شغل، نام شرکت و محل کار است. بررسی دقیق کد HTML موارد زیر را نشان می دهد:

  • عناوین شغلی درون تگ های h2 که دارای کلاس jobTitle هستند محصور می شوند.
  • نام شرکت ها در داخل یک span تو در تو در یک div با ویژگی data-testid= “company-name” قرار دارند.
  • مکان ها را می توان در یک span و در داخل یک div یافت، اما این یکی دارای ویژگی data-testid= “text-location” است.

با این درک، بیایید به نوشتن کد خود ادامه دهیم.

روش نوشتن کد اسکرپینگ

در Pyppeteer می توانیم از خطوط کد زیر برای اجرای مراحل ذکر شده در بالا استفاده کنیم.

ابتدا نمونه مرورگر را اجرا کنید.

browser = await launch(headless=False)
page = await browser.newPage()

سپس به indeed.com بروید.

   await page.goto('https://www.indeed.com')

صبر کنید تا عناصر فیلد ورودی بارگیری شوند. این مرحله بسیار مهم است زیرا کد اغلب سریعتر از کد اجرا می شود page بارها

    await page.waitForSelector('#text-input-what')
    await page.waitForSelector('#text-input-where')

در ورودی عنوان شغلی “مهندس نرم افزار” و در ورودی مکان “USA” را تایپ کنید.

  await page.type('#text-input-what', 'Software Engineer')
  await page.type('#text-input-where', 'USA')

روی دکمه جستجو کلیک کنید.

    await page.click('button[type="submit"]')

منتظر بعدی باشید page برای بارگذاری

    await page.waitForNavigation()

عنوان شغل، نام شرکت و محل کار را استخراج کنید و print اطلاعات.

job_listings = await page.querySelectorAll('.resultContent')
    for job in job_listings:
        # Extract the job title
        title_element = await job.querySelector('h2.jobTitle spanHow to Build a Job Board Scraper with Python')
        title = await page.evaluate('(element) => element.textContent', title_element)


        # Extract the company name
        company_element = await job.querySelector('div.company_location [data-testid="company-name"]')
        company = await page.evaluate('(element) => element.textContent', company_element)


        # Extract the location
        location_element = await job.querySelector('div.company_location [data-testid="text-location"]')
        location = await page.evaluate('(element) => element.textContent', location_element)


        print({'title': title, 'company': company, 'location': location})

مرورگر را ببندید.

    await browser.close()

هنگامی که کد کامل را جمع آوری کردیم، کدی را که در زیر می بینید دریافت می کنیم. async و await کلمات کلیدی مورد استفاده در برنامه نویسی ناهمزمان هستند. اگر می خواهید در مورد آن بیشتر بدانید، می توانید این مقاله را بخوانید. برنامه نویسی ناهمزمان برای کارآمدتر کردن خراش دادن مفید است.

import asyncio
from pyppeteer import launch


async def scrape_indeed():
    browser = await launch(headless=False)
    page = await browser.newPage()


    await page.goto('https://www.indeed.com')


    await page.waitForSelector('#text-input-what')
    await page.waitForSelector('#text-input-where')


    await page.type('#text-input-what', 'Software Engineer')
    await page.type('#text-input-where', 'USA')


    await page.click('button[type="submit"]')


    await page.waitForNavigation()


    job_listings = await page.querySelectorAll('.resultContent')
    for job in job_listings:
        # Extract the job title
        title_element = await job.querySelector('h2.jobTitle spanHow to Build a Job Board Scraper with Python')
        title = await page.evaluate('(element) => element.textContent', title_element)


        # Extract the company name
        company_element = await job.querySelector('div.company_location [data-testid="company-name"]')
        company = await page.evaluate('(element) => element.textContent', company_element)


        # Extract the location
        location_element = await job.querySelector('div.company_location [data-testid="text-location"]')
        location = await page.evaluate('(element) => element.textContent', location_element)


        print({'title': title, 'company': company, 'location': location})




    await browser.close()


# Run the coroutine
if __name__ == '__main__':
    asyncio.run(scrape_indeed())

همانطور که با هر خط از این کد آشنا شدید، می توانید آن را به روش های مختلف آزمایش کنید. به عنوان مثال، می‌توانید شهرها و عناوین شغلی مختلف را برای دستیابی به نتایج متنوع اضافه کنید.

پیشنهاد می‌کنیم بخوانید:  دکمه راه اندازی را با جاوا اسکریپت بر روی کلید Enter کلیک کنید

خراش دادن هر سایت دیگری به دنبال همین است process. تنها کاری که باید انجام دهید این است که عناصر HTML مربوطه و ویژگی‌های منحصر به فرد آن‌ها مربوط به جزئیاتی را که می‌خواهید استخراج کنید شناسایی کنید و سپس کد را بر اساس آن تنظیم کنید.

مراحل بعدی چیست؟

به عنوان مراحل بعدی، می توانید موارد زیر را انجام دهید:

داده های خراشیده شده را ذخیره کنید

به جای اینکه صرفاً داده های خراشیده شده را چاپ کنید، می توانید آن را در یک فایل CSV یا JSON برای استفاده بعدی ذخیره کنید. می توانید این کار را با قطعه کد زیر انجام دهید که داده ها را در قالب CSV ذخیره می کند.

with open('jobs.csv', 'w', newline="", encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(['Title', 'Company', 'Location'])

پاکسازی و سازماندهی داده ها

هنگامی که داده های لازم را خراش دادید، تمیز کردن و سازماندهی موثر آنها گام مهم بعدی است.

این process شامل حذف ورودی های تکراری برای اطمینان از منحصربفرد بودن هر فهرست، استانداردسازی عناوین شغلی با فرمت استاندارد برای مقایسه آسان، یا فیلتر کردن فهرست هایی که معیارهای خاص شما را ندارند. این مرحله برای ایجاد فهرستی از فرصت های شغلی مناسب و ارزشمند برای کاربران بسیار مهم است.

همچنین، دسته‌بندی داده‌ها را در زمینه‌های مختلف مانند «فهرست شرکت» و «شرکت مرتبط» در نظر بگیرید، که می‌تواند به ساختار منسجم‌تر داده‌ها کمک کند و آن‌ها را برای تجزیه و تحلیل و بازیابی کاربر پسند کند.

یک رابط Job Board ایجاد کنید

پس از تمیز کردن و سازماندهی داده های خود، زمان تصمیم گیری فرا رسیده است روی چارچوب یا ابزاری برای ارائه لیست انتخاب شده از فرصت های شغلی شما.

این که آیا یک وب پایه را انتخاب می کنید page برای نمایش مستقیم لیست ها، یک برنامه وب پیچیده با قابلیت جستجو و فیلتر پیشرفته، یا یک برنامه تلفن همراه برای onدسترسی سریع، نکته کلیدی این است که مطمئن شوید پورتال شغلی شما کاربرپسند و در دسترس است.

رابط شما باید به کاربران اجازه دهد تا به راحتی در «فهرست باز شدن شغل» حرکت کنند و فرصت‌ها را براساس دسته‌هایی مانند عنوان شغل، اندازه شرکت، مکان و سایر معیارهای مرتبط بررسی کنند.

درک مفاهیم حقوقی و اخلاقی خراش دادن وب بسیار مهم است. این شامل احترام به فایل robots.txt هر وب‌سایتی است که می‌خرید و به شرایط خدمات آن‌ها پایبند هستید.

روش‌های خراش دادن اخلاقی فقط مربوط به انطباق نیست – آنها در مورد اطمینان از اینکه فعالیت‌های خراش دادن شما تأثیر مخربی بر عملکرد وب‌سایت نمی‌گذارد یا به‌طور ناعادلانه از داده‌های ارائه‌شده بهره‌برداری نمی‌کند.

همانطور که داده‌ها را از سایت‌های شرکت و پورتال‌های شغلی جمع‌آوری می‌کنید، همیشه شفافیت و احترام به منبع داده، متعادل کردن جمع‌آوری داده‌ها و استانداردهای اخلاقی را در اولویت قرار دهید.

نتیجه

با این مراحل، شما باید یک اسکراپر کار برد با استفاده از Python و Pyppeteer داشته باشید. به یاد داشته باشید، خراش دادن وب می تواند به دلیل ماهیت پویا صفحات وب پیچیده باشد، بنابراین انتظار داشته باشید که با تغییر ساختار وب سایت ها در طول زمان، تنظیماتی را انجام دهید.

با تشکر از شما برای خواندن! من جس هستم و در Hyperskill متخصص هستم. شما می توانید بررسی کنید مقدمه ای بر پایتون دوره روی پلت فرم