🚀 تست استخدام توسعه‌دهنده Python

آزمون عملی برای ارزیابی مهارت‌های شما در توسعه Python، اسکرپینگ وب، رفع اشکال و ریفکتورینگ کد

2-3 ساعت زمان تخمینی
100 امتیاز کل
3 بخش اصلی
بخش ۱ از ۳

🔧 رفع اشکال و ریفکتورینگ

40 امتیاز

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

کد اولیه (دارای مشکل):

import requests
from bs4 import BeautifulSoup
import time

def get_products(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    products = []
    items = soup.find_all('div', class_='product-item')
    
    for item in items:
        name = item.find('h3').text
        price = item.find('span', class_='price').text
        price = price.replace('$', '')
        products.append({'name': name, 'price': price})
    
    return products

def scrape_all_pages():
    base_url = 'https://example-shop.com/products?page='
    all_products = []
    
    for page in range(1, 100):
        url = base_url + str(page)
        products = get_products(url)
        all_products.extend(products)
        time.sleep(0.1)
    
    return all_products

products = scrape_all_pages()
print(products)

وظیفه ۱: شناسایی مشکلات (10 امتیاز)

  • حداقل 5 مشکل یا نقطه ضعف در کد بالا را لیست کنید
  • توضیح دهید چرا هر مورد مشکل است

وظیفه ۲: ریفکتور کد (30 امتیاز)

  • مدیریت خطا (Error Handling) مناسب اضافه کنید
  • از بهترین شیوه‌های Python استفاده کنید
  • کد را ماژولار و قابل استفاده مجدد کنید
  • مدیریت صفحات خالی و پایان لیست را اضافه کنید
  • از type hints استفاده کنید
  • docstring مناسب برای توابع بنویسید
بخش ۲ از ۳

💻 توسعه اسکرپر واقعی

40 امتیاز

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

گزینه الف: اسکرپر خبری

وب‌سایت: BBC Persian یا سایت خبری فارسی

داده‌ها: عنوان، خلاصه، تاریخ، دسته‌بندی، لینک

گزینه ب: اسکرپر محصولات

وب‌سایت: Digikala یا سایت مشابه

داده‌ها: نام، قیمت، تخفیف، امتیاز، تعداد نظرات

الزامات پیاده‌سازی:

1️⃣ معماری تمیز

  • استفاده از کلاس‌ها و OOP
  • جداسازی منطق اسکرپینگ از ذخیره‌سازی داده

2️⃣ مدیریت خطا

  • مدیریت timeout، خطاهای شبکه، و تغییرات ساختار HTML
  • Retry mechanism برای درخواست‌های ناموفق

3️⃣ ذخیره‌سازی داده

  • ذخیره در JSON
  • ذخیره در CSV
  • (اختیاری) ذخیره در پایگاه داده SQLite

4️⃣ بهترین شیوه‌ها

  • رعایت robots.txt
  • استفاده از User-Agent مناسب
  • Rate limiting برای جلوگیری از فشار به سرور
  • استفاده از session برای بهبود کارایی

5️⃣ Configuration

  • پارامترهای قابل تنظیم (URL، تعداد صفحات، تاخیر و...)
  • امکان خواندن تنظیمات از فایل config
بخش ۳ از ۳

✅ تست و کیفیت کد

20 امتیاز

Unit Tests (10 امتیاز)

  • حداقل 5 تست برای توابع مختلف
  • استفاده از pytest یا unittest
  • Mock کردن درخواست‌های HTTP

مستندات (5 امتیاز)

  • فایل README.md کامل
  • توضیح معماری کد
  • مثال‌های استفاده

کیفیت کد (5 امتیاز)

  • رعایت PEP 8
  • استفاده از linter
  • کد تمیز و خوانا

ساختار پیشنهادی پروژه:

project/
├── README.md
├── requirements.txt
├── config.py
├── scraper/
│   ├── __init__.py
│   ├── base_scraper.py
│   ├── product_scraper.py
│   └── utils.py
├── storage/
│   ├── __init__.py
│   ├── json_handler.py
│   └── csv_handler.py
├── tests/
│   ├── __init__.py
│   └── test_scraper.py
└── main.py
بونوس

🎯 سوالات نظری (اختیاری)

+15 امتیاز بونوس

سوال ۱: چالش‌های اسکرپینگ (+5 امتیاز)

  • سه چالش اصلی در اسکرپینگ وب‌سایت‌های مدرن را نام ببرید
  • برای هر کدام یک راه‌حل پیشنهاد دهید

سوال ۲: کارایی و مقیاس‌پذیری (+5 امتیاز)

  • چگونه یک اسکرپر را برای پردازش هزاران صفحه بهینه می‌کنید؟
  • تفاوت بین synchronous و asynchronous scraping چیست؟

سوال ۳: مسائل قانونی و اخلاقی (+5 امتیاز)

  • چه نکات قانونی و اخلاقی‌ای باید در اسکرپینگ رعایت شوند؟
  • چگونه تشخیص دهیم اسکرپینگ یک سایت مجاز است یا خیر؟

📤 نحوه ارسال تست

لطفاً موارد زیر را ارسال کنید:

  1. کد کامل در یک repository Git (GitHub, GitLab, یا ...)
  2. فایل README.md با دستورالعمل کامل
  3. فایل requirements.txt با لیست کتابخانه‌های مورد استفاده
  4. (اختیاری) فایل‌های تست
  5. پاسخ‌های نوشتاری به سوالات نظری در فایل جداگانه

📊 معیارهای ارزیابی

عملکرد صحیح کد

30%

کیفیت و تمیزی کد

25%

مدیریت خطا و استحکام

20%

معماری و طراحی

15%

مستندات و تست‌ها

10%


📚 کتابخانه‌های پیشنهادی

⚠️ نکات مهم