بررسی ابزارهای جمع‌آوری و استخراج اطلاعات از سطح وب در پایتون

بررسی ابزارهای جمع‌آوری و استخراج اطلاعات از سطح وب در پایتون

در این مقاله قصد داریم برخی از ابزارهای کارآمد جمع‌آوری و استخراج اطلاعات از سطح وب در زبان برنامه‌نویسی پایتون که اصطلاحاً Scraper یا Crawler نامیده می‌شوند، را مورد بررسی قرار دهیم. در واقع، در یک دنیای ایده‌آل اما در عین حال فرضی، تمامی اطلاعات به صورت دقیق در یک فرمت مشخص، اپن‌سورس و با مستندات کامل ارائه می‌شوند که به راحتی می‌توانید برای هر زمینه‌ای که نیاز دارید از آنها استفاده کنید اما در دنیای واقعی،‌ اطلاعات از صحت کامل برخوردار نیستند،‌ دسته‌بندی کامل و مشخصی نداشته و متناسب با نیاز خود نمی‌توانید اطلاعات را بررسی کنید و بیشتر آن‌ها تاریخ گذشته هستند!

در اکثر مواقع، بیشتر اطلاعاتی که نیاز دارید درون یک یا چند وب‌سایت خاص عرضه شده‌اند؛ در حالی که بیشتر وب‌سایت‌ها تلاش می‌کنند که اطلاعات را تمیز و سالم و در یک فرمت صحیح و ساختار یافته ارائه دهند، بسیاری این کار را انجام نمی‌دهند و برای دستیابی به این دست اطلاعات، می‌بایست با اصول استخراج اطلاعات از سطح وب آشنا شویم.

Scrap (خراشیدن) و Crawl (خزیدن) را اگر بخواهیم خیلی ساده ترجمه کنیم بایستی بگوییم که منظور از این اصطلاحات یافتن،‌ پردازش و مرتب‌سازی ساختار یا دیتای یک وب‌سایت است (Crawler یا Spider روباتی است که سرتاسر وب یا همان WWW که مخفف عبارت World Wide Web است را بررسی می‌کند و Scraper به نرم‌افزارهایی گفته می‌شود که اطلاعاتی که توسط یک Crawler بررسی شد را استخراج می‌کنند).

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

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

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

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

همچنین چندین ویژگی دیگر وجود دارند که به صورت دستی قابل تنظیم هستند؛ مانند اولویت‌بندی، بازپردازش صفحاتی که عملیاتشان موفقیت‌آمیز نبوده است،‌ بررسی صفحات بر مبنای عمر صفحه، تاریخ انتشار و دیگر موارد. Pyspider از هر ۲ ورژن 2 و 3 پایتون پشتیبانی می‌کند و برای افزایش سرعت کارتان می‌توانید از چندین ابزار Crawling در یک فرمت پشتیبانی شده به همراه این ابزار استفاده کنید.

کاربرد مقدماتی Pyspider به خوبی مستندسازی شده‌ و شما می‌توانید آنها را به همراه مثال‌هایی که در مستندات آمده بررسی و مطالعه کنید. ابزار Pyspider که تحت لایسنس Apache 2 قرار دارد، کماکان به طور فعال در گیت‌هاب در حال توسعه است و دولوپرهای بسیاری در حال توسعۀ آن هستند.

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

این ابزار تحت لایسنس MIT عرضه شده است و برای اطلاعات بیشتر در مورد چگونگی کار با آن، از مثال سورس موجود در فایل example.py در صفحهٔ گیت‌هاب این پروژه استفاده کنید (متأسفانه در حال حاضر، این پروژه هنوز مستنداتی قوی ندارد).

Scrapy
Scrapy یک ابزار استخراج اطلاعات است که توسط یک جامعهٔ فعال از دولوپرها پشتیبانی می‌شود (همچنین شما می‌توانید ابزار استخراج اطلاعات خود را نیز در این جامعه بسازید). این ابزار علاوه بر استخراج، تجزیه و تحلیل اطلاعات سطح وب، می‌تواند به راحتی داده‌هایی را که در فرمت‌های مختلفی مانند JSON یا CSV ذخیره شده‌اند را استخراج کند و این داده‌ها را در هر دیتابیسی که بخواهید ذخیره کند.

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

برای مراحل مقدماتی یادگیری Scrapy، می‌توانید از مستندات آنلاین Scrapy استفاده کنید. با مراجعه به ریپازیتوری گیت‌هاب Scrapy می‌توانید به سورس‌کد این پروژه نیز دسترسی پیدا کنید (لازم به ذکر است که این ابزار تحت بند سوم لایسنس BSD مجوز گرفته است). همچنین اگر شما با برنامه‌نویسی و کدنویسی راحت نیستید، می‌توانید از رابط کاربری بصری Portia استفاده کنید که کار با این ابزار را راحت‌تر می‌کند.

معرفی دیگر ابزارهای Scrap و Crawl‌
علاوه بر ابزارهای فوق‌الذکر، لایبرری‌های کاربردی دیگری نیز جهت Scrap و Crawl‌ کردن وب‌سایت در اختیار دولوپرها قرار دارد که در ادامه برخی از مهم‌ترین آنها را مورد بررسی قرار خواهیم داد:

Cola 
خود را یک فریمورک خزندۀ توزیع شده در سطح بالا معرفی می‌کند و اگر هنوز از پایتون 2 استفاده می‌کنید، ممکن است که به کارتان بیاید ولی باید دقت کنید که بیش از ۲ سال از آخرین آپدیت آن می‌گذرد!

Demiurge‌ 
که از هر ۲ ورژن پایتون 2 و 3 پشتیبانی می‌کند، یکی دیگر از کاندیدهای بالقوه برای بررسی است (البته این در حالی است که توسعۀ این پروژه نسبتاً آرام صورت می‌گیرد).

Feedparser 
ممکن است یک پروژۀ مفید باشد که به شما کمک بکند تا اطلاعاتی را که بررسی کرده‌اید در RSS‌ یا فید Atom ذخیره کنید.

Lassie 
این امکان را به آسانی به شما می‌دهد تا بتوانید محتوای اصلی مانند توضیحات، عنوان، کلمات کلیدی و یا لیستی از تصاویر موجود در وب‌سایت را استخراج کنید.

RoboBrowser 
یک لایبرری ساده دیگر برای پایتون 2 و 3 است که این امکان را به شما می‌دهد تا کلیک شدن باتن‌ها یا همان دکمه‌های سایت و همچنین پُر شدن فرم‌های سایت را بررسی کنید. اگرچه مدتی از آخرین آپدیت آن می‌گذرد، اما هنوز انتخابی منطقی به نظر می‌رسد.

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

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

منبع


علی‌اکبر محمدی