خب! در ابتدا باید بگم که این چیزی که میگی:
نحوه گرفتن اطلاعات یک سایت در سایت خودمان
رو بهش میگن «کراول» (واکشی) کردن. اینکه این چیه، اینکه چطوری میشه پیاده سازیش کرد، اینکه چه محدودیت هایی داره و .. رو در ادامه توضیح میدم.
کراول یا واکشی کردن چیست؟
در دنیای برنامه نویسی (بخصوص وب) ، وقتی یک صفحه وب رو توسط یک بات (که توسط یک زبان برنامه نویسی نوشته شده) باز میکنی و دیتاش رو کپی و میریزی تو دیتابیس خودت (یا دیتا رو میگیری میفرستی واسه یه وب سرویس دیگه) رو بهش میگن کراول کردن.
برای این کار بیشمار کتابخونه و پلاگین وجود داره. اگه بخوام متناسب با سوال خودت بگم، پلاگین rexcrawler یکی از پلاگین های محبوب وردپرسی هست دقیقا برای همین کار:
rexCrawler uses regular expressions to crawl specified websites.
Websites are saved in user-defined groups, which can then be showed on wordpress pages/posts using shortcodes.
The data crawled by rexCrawler is saved in the WP database in custom tables. Once data has been crawled, it can be inserted
into a page using the shortcode [rexCrawler]
همانطور که از توضیحات پلاگین مشخص هست، کاربرد این پلاگین واکشی صفحات وب هست و ذخیره اونا در دیتابیس که نهایتان توی pages/posts
توسط شرتکاتش نمایش داده میشن. تمام این فرایند (همانطور که از اسم این پلاگین مشخصه) مبتنی بر ریجگس regex هست. (ریجکس رو توی لام تا کام با برچسب عبارات باقاعده میشناسیم).
نکته: به عنوان یک نکته تکمیلی هم باید بگم که کتابخونه های دیگه ای هم برای زبان های دیگه وجود داره که به صورت خیلی دقیق تر و حرفه ای تر همین کار رو با عملکرد خیلی بهتری انجام میدن. مثلا کتابخونه PHP Simple HTML DOM Parser
یکی از کتابخونه های زبان PHP است که این امکان رو به ما میده که صفحات وب رو واکشی و تجزیه کنیم.
پروسه کرال کردن رو میشه به چند دسته تقسیم کرد:
-
باز کردن یک صفحه وب: که عموما در زبان برنامه نویسی PHP توسط تابع
file_get_contents
انجام میشه. یعنی تمام محتوای یک صفحه انگلیسی رو باز می کنه ([تمام دام رو]؛ دام به معنی یک صفحه وب به همراه تمام تگ های HTMLش).
-
تجزیه کردن محتوای صفحه وب: همانطور که گفته شد، تمام دام الان باز شده و ما لازم داریم که اونو تجزیه کنیم؛ این کار رو به منظور جدا کردن دیتایی که لازم داریم از توی صفحه انجام میدیم. خیلی جاها از ریجکس regex برای این کار استفاده می کنن. اگه هم خیلی حرفه ای بخوایم جلو بریم، از کتابخونه های DOM Parser باید استفاده کرد. مثل همون
PHP Simple HTML DOM Parser
که بالاتر گفتم.
-
نرمال سازی اطلاعات انتخاب شده: وقتی یک بخشی از دام رو انتخاب میکنیم، شاید یک سری دیتای اضافی هم این وسط انتخاب بشه، یا شایدم ما لازم داریم دیتای چندین بخش مختلف از صفحه رو بهم بچسبونیم تا معنی مد نظرمون ساخته بشه و خلاصه الان توی این مرحله وقتشه که تگ های اضافی رو حذف کنیم و نهایتا دیتامون رو تر و تمیز کنیم. یعنی دیتامون رو آماده کنیم برای ذخیره شدن در بانک اطلاعاتی (دیتابیس).
-
ذخیره اطلاعات: خب تا به اینجای کار دیتای مورد نظر رو انتخاب کردیم، ترو تمیزش کردیم و الان وقت این رسیده که اونو توی دیتابیس ذخیره کنیم (یا هرجای دیگه، مثلا توی یه فایل؛ یا حتی میتونیم همونجا بفرستیمش واسه یه API). برای انجام این کار هم خب توضیحات زیادی لازم نیست و یک کوئری
INSERT
هست توی دیتابیس.
پس از طی کردن 4 مرحله مذکور، دیتای مورد نظر توی دیتابیس ما وجود داره و عملا میتونیم یک ویو view بسازیم و دیتا رو نمایش بدیم و این پروسه رو به عرصه عمل برسونیم. امیدوارم که توضیحاتم یک شفافیت نسبی از قضیه رو برات ایجاد کرده باشه.
این رو هم بگم که توی این مسیر موانع زیادی وجود داره معمولا، از جمله پروتکل های http و https برای باز کردن صفحه ای که قصد داریم کراول کنیم، یا گاها پیش میاد که اول باید (همون از طریق کد و توسط باتی که داری میسازی) توی یک صفحه ای لاگین کنی که تازه این اجازه رو داشته باشی صفحه مورد نظرت رو ببینی و که بخوای واکشیش کنی و ..! خلاصه فرایند ثابتی نیست، در وب سایت های مختلف و صفحات مختلف، تا حدی متفاوت باید عمل کرد. موفق باشی.
کلید واژگان:
- واکشی کردن
- کراول کردن / Crawling
- تجزیه صفحات-وب / محتوا
- پارس کردن / Parsing
- ریجکس / RegEx / عبارات منظم (با قاعده)
- دام / DOM