1 پست در این موضوع قرار دارد

ارسال شده در (ویرایش شده)

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

منبع آموزش

ویرایش شده در توسط محمد اعظمی
2

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط Black_Sky


      با سلام خدمت دوستان
      در این آموزش قصد دارم درباره زبان جاوا اسکریپت آموزش بدم
      این آموزش نوع آموزش ها در فضای مجازی بسیار وجود دارد اما قرار هست تفاوت های بسیاری وجود داشته باشد
      خب ابتدا :
      1-در این تاپیک اسپم ندهید و یا سوال نفرمایید /سوال و جواب در تاپیک جداگانه مطرح کنید تا بقیه دوستان استفاده کنند
      2-آموزش ها پیوسته میباشند و در آخر به صورت یک فایل PDF در اختیار دوستان قرار میگیرد
      3-یک سری پیش نیاز هم لازم هست همانند : HTML
      4-اگر هر نوع پیشنهاد و یا انتقادی هم وجود دارد با بنده در ارتباط باشید
      5-دوستانی هم که میخواهند در این تاپیک همکاری کنند اعلام نمایند
      --------------------
      موفق باشید
      ---------------------
    • توسط madish
      سلام وقت بخیر یه سوال داشتم اگر بتونین کمک کنید ممنون میشم
      ببینید من یه لیست باز شو شرطی میخام که بدون دکمه تایید یا ارسال باشه بع این صورت که کاربر وقتی لیست رو باز کرد روی هر گزینه کلیک کرد یه لینک براش باز شه
      ساده تر میتونم بگم
      لیست شرطی که بلافاصله از انتخاب (بدون دکمه تایید یا ارسال) یه لینک جدید باز شه
      مث صفحه اصلی سایت اچاره با یه تفاوت های ریز
      اینو چطور میتونم با وردپرس پیاده کنم ؟
      افزونه یا چیزی هست ؟
      ممنون میشم راهنمایی کنین
    • توسط mory_fun
      سلام دوستان
      یک دامین جدید برای سایتم ادد کردم و بقیه رو به این شکل ریدایرکت کردم درسته ؟
      RewriteEngine on RewriteCond %{HTTP_HOST} ^www.old.ir [NC,OR] RewriteCond %{HTTP_HOST} ^old.ir [NC] RewriteCond %{HTTP_HOST} ^www.new.xyz [NC] RewriteRule ^(.*)$ http://new.xyz/$1 [L,R=301,NC]  
    • توسط naderi
      سلام .. برای توسعه یک وب سایت با قالب Eduma وردپرس میخوایم یه سری قابلیت ها رو بهش اضافه کنیم .. از دوستان کسی هست که بتونه به ما کمک کنه؟
    • توسط s.m.a1383
      سلام می خواستم ببینم به جای اینکه محصولات رو توی صفحه اول سایت بگذارم میشه دسته های محصولات رو توی صفحه اول سایت گذاشت؟
      آدرس سایت من:innolabs.ir
      در ضمن از پوسته "هستیا "استفاده میکنم افزونه یا کدی هست که بتونه به جای نمایش محصولات در صفحه اول دسته های محصولات رو نمایش بده در ضمن هر کد یا افزونه ای که گفتید طریقه انجامش رو هم بگید لطفا.
      خیلی ممنون از لطفتون