مقدمه
در این مقاله عملی برای توسعهدهندههای پایتون در سطح متوسط، نحوهٔ نصب، پیکربندی و استفاده از ScrapydWeb را برای مدیریت و مانیتورینگ پروژههای وب اسکریپینگ با Scrapy شرح میدهم. تا انتها خواهید دانست چگونه Scrapyd را نصب و پروژهها را به آن دیپلوی کنید، ScrapydWeb را راهاندازی کنید، لاگها را با Logparser پردازش کنید و از طریق API بهصورت برنامهنویسی کارها را زمانبندی کنید.
ScrapydWeb چیست و چه مزایایی دارد
ScrapydWeb یک داشبورد مدیریتی برای تعامل آسانتر با دیمونهای Scrapyd است. هدف آن جمعآوری کنترل چند سرور، زمانبندی و نمایش آمار اجرای خزندگرها در یک رابط واحد است.
- مدیریت خوشهای از Scrapyd و اجرای فرمان روی چند نود
- تحلیل لاگ و نمایش آمار و پیشرفت کارها
- امکانات اضافی مثل بستهبندی خودکار، تایمر تسک و احراز هویت پایه
نصب و آمادهسازی محیط
مراحل کلی:
- نصب و اجرای Scrapyd
- دیپلوی پروژهٔ Scrapy به Scrapyd
- نصب و اجرای ScrapydWeb
- نصب Logparser برای استخراج آمار از لاگها
نصب Scrapyd و دیپلوی پروژه
برای نصب Scrapyd از pip استفاده کنید و سرویس را اجرا نمایید:
pip install scrapyd
scrapyd
این سرویس بهصورت پیشفرض روی پورت 6800 گوش میدهد. سپس برای دیپلوی پروژه از scrapyd-client استفاده کنید:
pip install git+https://github.com/scrapy/scrapyd-client.git
# در مسیر پروژه scrapy:
scrapyd-deploy default
فایل scrapyd.cfg باید بخش [deploy] را داشته باشد، مثلاً:
[settings]
default = demo.settings
[deploy]
url = http://localhost:6800/
project = demo
توضیح: بخش url نشاندهندهٔ endpoint برای آپلود نسخههای پروژه است و project نام پروژهای است که دیپلوی میشود.
نصب و اجرای ScrapydWeb
برای نصب آخرین نسخه:
pip install --upgrade git+https://github.com/my8100/scrapydweb.git
scrapydweb
دستور scrapydweb در اولین اجرا فایلهای پیکربندی را میسازد؛ در اجراهای بعدی سرویس را روی 127.0.0.1:5000 بالا میآورد. اگر در اولین اجرا سرور شروع نشد، مجدداً دستور را اجرا کنید تا سرویس راه بیفتد.
پیکربندی اتصال به سرورهای Scrapyd
لیست سرورها در تنظیمات SCRAPYD_SERVERS قرار میگیرد. فرمتها میتواند رشته یا تاپل باشد. نمونهای از فرمت رشتهای:
SCRAPYD_SERVERS = [
'127.0.0.1:6800',
'username:password@remotehost:6801#group',
]
نکات امنیتی و شبکهای:
- برای دسترسی از راه دور مطمئن شوید bind_address = 0.0.0.0 در تنظیمات Scrapyd تنظیم و سرویس بازنشانی شده باشد.
- در محیطهای عمومی از HTTPS و احراز هویت قوی استفاده کنید؛ بهطور پیشفرض Scrapyd و ScrapydWeb از TLS استفاده نمیکنند.
- برای اعتبارسنجی کاربران داشبورد از لایههای احراز هویت معقول مانند پروکسی معکوس یا basic auth (در صورت فعال) بهره ببرید.
مثال: زمانبندی تسک با API از پایتون
گاهی لازم است از طریق یک اسکریپت پایتون مستقیم به Scrapyd درخواست بفرستید تا یک spider اجرا شود. مثال زیر نشان میدهد چگونه یک درخواست POST به endpoint زمانبندی ارسال کنیم:
import requests
url = "http://127.0.0.1:6800/schedule.json"
data = {
"project": "demo",
"spider": "my_spider",
"setting": "KEY=VALUE" # اختیاری: تنظیمات runtime
}
resp = requests.post(url, data=data)
print(resp.status_code, resp.json())
توضیح خطبهخط:
- ورودیها: url آدرس endpoint، data شامل نام پروژه و نام spider است.
- عملکرد: با requests.post یک درخواست فرم-URL-encoded به Scrapyd میفرستیم که باعث میشود spider روی سرور اجرا شود.
- خروجی: resp.status_code وضعیت HTTP و resp.json() حاوی شناسه job یا پیام خطا است.
- نکته: برای سرورهای محافظتشده باید احراز هویت (Basic/Auth token) را هم به هدرها اضافه کنید.
Logparser و جمعآوری آمار اجرایی
برای دیدن آمار و لاگهای اجرای spiders باید لاگها را پارس کنید. Logparser این کار را انجام میدهد و خروجی را برای ScrapydWeb قابل مصرف میکند.
pip install logparser
# در همان دایرکتوریای که Scrapyd لاگها قرار دارند:
logparser
توصیه پیکربندی: اگر Scrapyd و ScrapydWeb روی یک ماشین هستند، مقدار LOCAL_SCRAPYD_LOGS_DIR را به مسیر لاگها تنظیم و ENABLE_LOGPARSER = True در فایل تنظیمات ScrapydWeb قرار دهید.
کار با داشبورد ScrapydWeb
پس از اتصال سرورها و داشتن لاگهای پردازششده، میتوانید:
- از صفحهٔ سرورها وضعیت هر نود را ببینید و گروهبندی کنید.
- از صفحهٔ Run Spider یک spider را انتخاب و اجرا یا زمانبندی دورهای (cron) کنید.
- آمار اجرای هر job، لاگها و دستهبندی خطاها را مشاهده کنید (در صورت فعال بودن Logparser).
مقایسه با گزینههای دیگر
چند جایگزین وجود دارد که ویژگیها و روشهای متفاوتی ارائه میدهند:
- ScrapeOps: علاوه بر زمانبندی و مدیریت، امکانات مانیتورینگ پیشرفته، هشداردهی و داشبوردهای متنوع ارائه میکند.
- Gerapy و SpiderKeeper: بعضی قابلیتها مشابه ScrapydWeb دارند اما ممکن است از نظر پایداری یا رابط کاربری تفاوت داشته باشند.
پیشنهاد: قبل از انتخاب، نیازمندیهای خود (مانند مقیاس، لاگینگ، احراز هویت و هزینه نگهداری) را مشخص کنید و براساس آن جایگزین مناسب را برگزینید.
بهترین روشها، بهینهسازی و مشکلیابی
- برای حجم بالا از توزیع نودها و مدیریت صف استفاده کنید تا هر سرور بار منطقی داشته باشد.
- از محدودیتگذاری نرخ (rate limiting) و صفبندی منطقی برای جلوگیری از بار زیاد روی هدف سایت استفاده کنید.
- برای پایداری، لاگها را به یک سیستم مرکزی (مثلاً فایلسیستم مشترک یا سرویس لاگینگ) ارسال کنید تا Logparser دسترسی داشته باشد.
- در مواجهه با خطاهای HTTP یا timeouts از retry با backoff تدریجی استفاده کنید.
- برای امنیت حداقل دسترسی لازم به endpoints بدهید و از شبکههای خصوصی یا VPN برای ارتباطات حساس استفاده کنید.
جمعبندی
ScrapydWeb ابزار خوبی برای مدیریت چند سرور Scrapyd و نگریستن منسجم به اجرای spiders است. با نصب ساده، قابلیتهایی مثل تحلیل لاگ و تایمر تسک، میتواند گردش کار اسکریپ شما را بهبود دهد. در عین حال برای تولیدیسازی باید به مسائل مربوط به امنیت، TLS، مقیاسپذیری و مانیتورینگ متمرکز توجه کنید. اگر نیاز به مانیتورینگ حرفهایتر دارید، جایگزینهایی مثل ScrapeOps را بررسی کنید.





