مهمان ارسال شده در آذر 93 گزارش بازنشر ارسال شده در آذر 93 (ویرایش شده) آموزش نوشتن خزنده وب با PHP – حالت الگوبرداری <- منبع آموزشسطح آموزش: متوسطبرداشتن اطلاعات از صفحات موجود در وب میتواند به دلایل مختلفی از جمله تولید اطلاعات در مورد آن سایت (مانند الکسا)، ایجاد یک موتور جستجو (مانند گوگل) و یا کپی برداری از آن سایت باشد. متداول ترین روش دریافت اطلاعات توسط خزنده از طریق بررسی سورس HTML و یا RSS است (گاهی وقت ها دریافت از طریق API هم امکان پذیر است).بهترین گزینه برای دریافت استفاده از RSS است (درصورت موجود بودن) چون سورس HTML ممکن است در بازه های زمانی نامعلوم تغییر پیدا کند اما RSS از یک استاندارد پیروی می کند به همین جهت تگ ها تغییر پیدا نمی کنند. روال کار یک خزنده هیچگاه ثابت نیست و نسبت به کاربرد آن متغیر است اما همه ی آنها یک ساختار مشابه دارند. دو حالت در نوشتن خزنده ها وجود دارد، یا طبق یک الگو کار می کنند و یا از طریق روش پرچم گذاری اطلاعات مورد نظر را دریافت می کنند.حالت الگو برداریاستفاده از API برای دریافت اطلاعات بارز ترین نمونه ازخزنده هایی هستند که طبق یک الگو عمل می کنند، اما الگو برداری فقط به استفاده از API ختم نمی شود؛ به طور کلی اگر وب سایت هدف از یک روند منظم برای نمایش اطلاعات استفاده کند، حالت الگوبرداری به کار می رود.مثلا سایت الکسا از یک الگوی منظم برای دسته بندی وب سایت ها استفاده می کند، مثال زیر فرمول دستیابی به وبسایت های برتر ایران است.http://www.alexa.com/topsites/countries;page_number/IRیافتن الگو به کاربرد خزنده وابسته است، به عنوان مثال من باتوجه به ویژگی های این الگو میخواهم اطلاعات 25 وب سایت برتر ایران را به دست آورم.پارامتر PAGE_NUMBER بیانگر شماره صفحه است که از 0 تا n عدد ادامه دارد (منظور از n شماره آخرین صفحه است). در هر صفحه اطلاعات 25 وب سایت لیست می شوند. طبق این اطلاعات؛ آدرس زیر 25 وب سایت برتر ایران را نشان می دهد.http://www.alexa.com/topsites/countries;0/IRدر مرحله بعدی با استفاده از xPath اطلاعات را از سورس html استخراج و فهرست بندی می کنیم.<?php$url = "http://www.alexa.com/topsites/countries;0/IR";$html = file_get_contents($url);libxml_use_internal_errors(true); // Yeah if you are so worried about using @ with warnings$doc = new DomDocument();$doc->loadHTML($html);$xpath = new DOMXPath($doc);$sites = $xpath->query('//*/li[@class="site-listing"]');$domains = array();foreach ($sites as $site) {$rank = $xpath->query('./div[@class="count"]', $site)->item(0)->nodeValue;$link = $xpath->query('./div/p[@class="desc-paragraph"]/a', $site);$domains[] = array('rank' => $rank,'name' => $link->item(0)->nodeValue,'domain' => $link->item(0)->getAttribute('href'),);}print_r($domains);?>نکته: فهرست بندی یکی از مراحل ثابت در ایجاد یک خزنده است، به طور کلی چه اطلاعات برای کاربر نمایش داده شوند و چه از خزنده به عنوان واسطه استفاده شود باید اطلاعات را فهرست بندی کرد تا قابل فهم باشد. همچنین یک خزنده می تواند به عنوان یک جاسوس عمل کند بنابراین فهرست بندی اطلاعات برای “هکر” (کرکر) در اولویت قرار دارد.در مثال فوق این قطعه کد اطلاعات را فهرست می کند.$domains[] = array( 'rank' => $rank, 'name' => $link->item(0)->nodeValue, 'domain' => $link->item(0)->getAttribute('href'), );کلید اصلی در انتخاب حالت الگوبرداری چیست؟برای مشخص کردن حالت دریافت اطلاعات باید به سرنخ ها توجه کنید (که در حالت الگوبرداری همیشه سرنخ ها مشابه هستند) مثلا شماره صفحات (در سایت الکسا) و شناسه مطلب (در سایت IMDB) یکتا هستند، یا به عبارت دیگر دارای یک الگوی ثابت هستند که با کمک آنها می شود اطلاعات را دریافت کرد.درآموزش بعدی نحوه نوشتن خزنده وب در حالت بدون الگو (پرچم گذاری) را توضیح می دهم. البته در حالت بدون الگو دست برنامه نویس باز است و پرچم گذاری نامی است که من به دلیل نحوه کار این روش برای آن انتخاب کرده ام. این روش نسبتا پیچیده است و درمقایسه با حالت الگوبرداری، سرنخ های مشابه کمتر است. پس خودتان را برای شیرجه زدن در کد های PHP آماده کنید منبع آموزش ویرایش شده آذر 93 توسط مهمان نقل قول لینک به ارسال
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .