خزنده وب چیست و چگونه با php یک خزنده بسازیم .

همان طور که از نامش پیداست خزنده یا CRAWLER در وبسایت عملیات خزیدن را انجام می دهد .خزنده ها در واقع بخش اصلی و مرکزی یک موتور جستجو را تشکیل می دهند. در واقع به زبان ساده، یک نرم افزار یا اسکریپت اتوماتیک است که با توجه به الگوریتم مشخص و هدفمند انواع موتورهای جستجو که برایشان تعریف شده است، در وب سایت های موجود به گردش میپردازند و محتوای آنها را در دیتابیس موتور جستجو ذخیره می کنند. به این فرایند index کردن محتوای وب سایت نیز گفته می شود.هدف از خزیدن می تواند هرچیزی باشید ، پیدا کردن تکنولوژی های وبسایت پیدا کردن یک موضوع خاص مثل قیمت ارز ، پیداکردن آسیب پذیری یا هرچیز دیگری که فکرش را بکنید . برای پرسیدن سوال های php خود و حل مشکلاتتان به گروه انجمن php ایران بپیوندید . https://t.me/IR_PHP_Developers_Communityکانال انجمن :https://t.me/IR_PHP_Dev_Community_channelمزایای استفاده از web crawler چیست ؟استفاده از خزنده های وب این مزیت را دارد که می تواند فرایند خزش دوره ای داده ها را کنترل نمایید. همچنین فواید دیگری دارد که عبارتند از:این پروسه در پشت زمینه اتفاق می افتد، و بیشتر اوقات بر روی عملکرد وبسایت تاثیر ندارد.بازرسی و ویرایش امکان پذیر است.جست و جوی سریع در صفحات .چگونه یک خزنده وب با php بسازیم ؟ابتدا باید یک فرم برای وارد کردن url بسازیم .<form method=&quotPOST&quot> <input type=&quottext&quot name=&quoturl&quot value=&quothttp://&quot> <input type=&quotsubmit&quot name=&quotsubmit&quot> </form>الان دیگه وقتشه بریم سراق کنترلر خودمون و یک کلاس به اسم CRAWL بسازیم .<?php /* |||==> 1) Send Request To Target. |||==> 2) Get the result. And Save Tt In To (crwal-result.html) File. |||==> 3) Stored Data In a File. |||==> 4) Reading File Values. |||==> 5) Searching In Result For Our Words. */ class CRAWL { public function Crawling($url) { // Send Request To target ------------------------------ $data = file_get_contents($url); // Get the result -------------------------------------- $data = strip_tags($data, &quot<a>&quot); $d = preg_split(&quot/<\/a>/&quot, $data); $links = []; // All Links will be Append To This List. foreach ($d as $k => $u) { if (strpos($u, &quot<a href=&quot) !== FALSE) { $u = preg_replace(&quot/.*<a\s+href=\&quot/sm&quot, &quot&quot, $u); $u = preg_replace(&quot/\&quot.*/&quot, &quot&quot, $u); array_push($links, $u); }} // Stored Data In a File ------------------------------- $file_allpage = fopen(&quotwebsite.html&quot, 'a'); // All data is stored in this file. $homepage = file_get_contents($url); $homepage_replace = str_replace(&quotgoogle&quot, '', $homepage); fwrite($file_allpage, $homepage_replace); foreach ($links as $link) { if (strstr($link, '*.php') or strstr($link, '*.asp') or strstr($link, '*.js') or strstr($link, '*.go') or strstr($link, '*.py') or strstr($link, '*.jquery')) { $data = file_get_contents($url . $link); $data_replace = str_replace(&quotgoogle&quot, '', $data); fwrite($file_allpage, $data_replace); } else { continue; }} // Reading File Values ---------------------------------- $file_read = fopen(&quotwebsite.html&quot, &quotr&quot); $value = fread($file_read, filesize(&quotwebsite.html&quot)); return $value;} public function Search($string, $word) { if (strpos($string, $word) != false) { $result = &quottrue" } else { $result = &quotfalse" } return $result; }}تا اینجا ما فقط یک کلاس ساختیم و داخلش دو متد قرار دادیم .حالا بیاید این کدهارو تکه تکه تحلیل کنیم .تابع Crawling یک آرگومان دریافت می کند که آن همان لینک یا url سایت است ، در مرحله اول با متغیر data یک رکوعست به سمت وبسایت ارسال میکنیم .$data = file_get_contents($url);تابع بالا میاد اول یک رکوعست میفرسته به اون صفحه و بعد تمام کدهای html,css ,js اون صفحه وب را داخل متغیر data$ ذخیره می کنه . حالا با کد های پایین میایم و تگ های a داخل صفحه را پیدا میکنیم و دیتای داخلشونو میخونم البته این کارو با جاوااسکریپت هم می شد انجام داد اما با php انجام دادیم .$data = strip_tags($data, &quot<a>&quot); $d = preg_split(&quot/<\/a>/&quot, $data);بعد از اون یک متغیربه اسم link$ می سازیم و مقداری براش قرار نمیدیم ، تا بعدا ازش استفاده کنیم .$links = []; // All Links will be Append To This List.حالا با یک حلقه میایم تمام لینک هایی که داخل صفحه پیدا کردیمو به اون آرایه اضافه میکنیم .foreach ($d as $k => $u) { if (strpos($u, &quot<a href=&quot) !== FALSE) { $u = preg_replace(&quot/.*<a\s+href=\&quot/sm&quot, &quot&quot, $u); $u = preg_replace(&quot/\&quot.*/&quot, &quot&quot, $u); array_push($links, $u); } }بعد از اینکار باید یک فایل بسازیم که بیاد تمام صفحاتی که ما میخوایم به سمتشون درخواست ارسال کنیم رو دیتا هاشون رو داخلش ذخیره کنیم .$file_allpage = fopen("website.html", 'a');حالا یک بار دیگه به همون صفحه اولمون رکوعست ارسال میکنیم که اونو اول داخل فایل ذخیره کنیم .$homepage = file_get_contents($url); $homepage_replace = str_replace(&quotgoogle&quot, '', $homepage); fwrite($file_allpage, $homepage_replace);حالا میایم به تک تک اون لینک هایی که داخل آرایه ذخیره کردیم یک رکوعست میفرستیم و دیتاشونو داخل اون فایل ذخیره میکنیم تا بتونیم یک عملیات خزیدن خوب داشته باشیم .foreach ($links as $link) { if (strstr($link, '*.php') or strstr($link, '*.asp') or strstr($link, '*.js') or strstr($link, '*.go') or strstr($link, '*.py') or strstr($link, '*.jquery')) { $data = file_get_contents($url . $link); $data_replace = str_replace(&quotgoogle&quot, '', $data); fwrite($file_allpage, $data_replace); } else { continue; }}حالا باید بیایم دیتاهای داخل اون فایل رو بخونیم و بعد برگردونیمش تا بعدا هر بلایی خواستیم سرش بیاریم .$file_read = fopen(&quotwebsite.html&quot, &quotr&quot); $value = fread($file_read, filesize(&quotwebsite.html&quot)); return $value;حالا وقت این رسیده که از این کلاس خفن که نوشتیم استفاده کنیم .include(&quotController.php&quot); $CRAWL = new CRAWL; if (isset($_POST['submit'])) { $CMS = ['.py', '.go', '.js', '.Css', '.asp', 'jquery', '.php', 'Bootstrap', 'script']; $url = $_POST['url']; $khazesh = $CRAWL->Crawling($url); echo &quotCMS Of This Website: $url &quot echo &quot<br>&quot echo &quot<br>&quot $number = 1; foreach ($CMS as $c) { $search = $CRAWL->search($khazesh, $c); if ($search != 'false') { echo $number . ') ' . $c . &quot<hr>&quot $number++; } }; unlink('website.html');}موفق و پیروز باشید .برای پرسیدن سوال های php خود و حل مشکلاتتان به گروه انجمن php ایران بپیوندید . https://t.me/IR_PHP_Developers_Communityکانال انجمن :https://t.me/IR_PHP_Dev_Community_channel