خزنده برای استخراج اطلاعات از سایت‌ها


#1

سلام

مناسبترین زبان (فریم ورک، کتابخونه و…) برای خزیدن در سایت‌ها و استخراج اطلاعات چه زبانی می باشد.

سایت‌هایی مثل ترب و ایمالز و … از چه چیزی استفاده میکنند.

ممنون میشم اساتید و دوستان عزیز راهنمایی بفرمایند.


#2

درود و سلام فرهاد عزیز

توصیه من استفاده از کتابخانه هایی مثل Selenium , BeautilfulSoup در Python هست.
آشنایی با Xpath Selector Query هم بسیار خوب هست که کمک می کنه بتونی بصورت سلسه مراتبی ریشه سند رو بگیری و جاهایی که میخوای رو به ترتیب اسکرپ کنی


#3

ممنون محمد جان که پاسخ دادی.

نظرت در مورد Scrapy جیه؟

منابعی که استفاده میکنند چقدره؟ میشه چندتا خزنده همزمان باهاشون ساخت؟


#4

من selenium رو پیشنهاد نمی کنم. بشدت کند هست. اگر می خوای js و css رو هم رندر کنی از یه چیزی مثل nightmare و یا puppteer استفاده کن در غیر این صورت یه لایبرری ساده برای ارسال درخواست انجام این کار به صورت موازی کفایت می کنه.


#5

برای شروع urllib + bs4 رو پیشنهاد میکنم. خیلی سادست و کد نهایی کوچیکه.
برای کارهای حرفه‌ای تر scrapy رو پیشنهاد میکنم. خودم خیلی کم باهاش کار کردم. ولی قابلیتهای زیادی داره به علاوه‌ی سرعت و قابلیت پردازشهای موازی. درکل برای کارهای بزرگ بهتره.

نمیدونم این وبسایتها جطوری کار میکنن ولی میشه حدث زد.
(بجز بخشهای ظاهری وبسایت) یه پنل مدیریت داره که میشه توش سایت جدید تعریف کرد و برای هر دامنه یه سری کانفیگهایی ثبت کرد که مثلا:

  • کلمه‌ی کلیدی رو به این url ارسال کن: http://site.com/search=?<search-keyword>
  • توی نتیجه دنبال id بگرد به نام content
  • محتویاتش رو بر اساس regex فلان پردازش کن و…

نحوه‌ی پیاده سازیش بستگی به زبان و فریموورکهایی که استفاده میکنیم داره ولی فکر میکنم این روشی که گفتم برای پایتون بشه استفاده کرد.


درمورد منابع مصرفی نمیتونم نظر بدم ولی چیزی که مسلمه اینه که باید به صورت async کار کنید چون ریکوئست زدن و دریافت دیتا زمان زیادی میگیره.
از طرف دیگه، این ویژگیها رو نمیشه داخل خود سایت قرار داد. باید یه نرم‌افزار جداگانه برای crawl کردن بنویسید که فقط دیتابیسش با دیتابیس اصلی سایت یکی باشه و این نرم‌افزار همیشه درحال اجرا باشه و توی سایتهای مختلف بگرده.


#6

تمرکز selenium روی test automation هست و کارش اصلا چیز دیگست، من هم پیشنهاد نمیکنم.