رفتن به مطلب

پست های پیشنهاد شده

آموزش نوشتن خزنده وب با 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 آماده کنید :)

منبع آموزش

ویرایش شده توسط مهمان
لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...