همان طور که از نامش پیداست خزنده یا CRAWLER در وبسایت عملیات خزیدن را انجام می دهد .
خزنده ها در واقع بخش اصلی و مرکزی یک موتور جستجو را تشکیل می دهند. در واقع به زبان ساده، یک نرم افزار یا اسکریپت اتوماتیک است که با توجه به الگوریتم مشخص و هدفمند انواع موتورهای جستجو که برایشان تعریف شده است، در وب سایت های موجود به گردش میپردازند و محتوای آنها را در دیتابیس موتور جستجو ذخیره می کنند. به این فرایند index کردن محتوای وب سایت نیز گفته می شود.
هدف از خزیدن می تواند هرچیزی باشید ، پیدا کردن تکنولوژی های وبسایت پیدا کردن یک موضوع خاص مثل قیمت ارز ، پیداکردن آسیب پذیری یا هرچیز دیگری که فکرش را بکنید .
https://t.me/IR_PHP_Developers_Community
https://t.me/IR_PHP_Dev_Community_channel
مزایای استفاده از web crawler چیست ؟
استفاده از خزنده های وب این مزیت را دارد که می تواند فرایند خزش دوره ای داده ها را کنترل نمایید. همچنین فواید دیگری دارد که عبارتند از:
ابتدا باید یک فرم برای وارد کردن url بسازیم .
<form method="POST"> <input type="text" name="url" value="http://"> <input type="submit" name="submit"> </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, "<a>"); $d = preg_split("/<\/a>/", $data); $links = []; // All Links will be Append To This List. foreach ($d as $k => $u) { if (strpos($u, "<a href=") !== FALSE) { $u = preg_replace("/.*<a\s+href=\"/sm", "", $u); $u = preg_replace("/\".*/", "", $u); array_push($links, $u); }} // Stored Data In a File ------------------------------- $file_allpage = fopen("website.html", 'a'); // All data is stored in this file. $homepage = file_get_contents($url); $homepage_replace = str_replace("google", '', $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("google", '', $data); fwrite($file_allpage, $data_replace); } else { continue; }} // Reading File Values ---------------------------------- $file_read = fopen("website.html", "r"); $value = fread($file_read, filesize("website.html")); return $value;} public function Search($string, $word) { if (strpos($string, $word) != false) { $result = "true" } else { $result = "false" } return $result; }}
تا اینجا ما فقط یک کلاس ساختیم و داخلش دو متد قرار دادیم .
تابع Crawling یک آرگومان دریافت می کند که آن همان لینک یا url سایت است ، در مرحله اول با متغیر data یک رکوعست به سمت وبسایت ارسال میکنیم .
$data = file_get_contents($url);
تابع بالا میاد اول یک رکوعست میفرسته به اون صفحه و بعد تمام کدهای html,css ,js اون صفحه وب را داخل متغیر data$ ذخیره می کنه .
حالا با کد های پایین میایم و تگ های a داخل صفحه را پیدا میکنیم و دیتای داخلشونو میخونم البته این کارو با جاوااسکریپت هم می شد انجام داد اما با php انجام دادیم .
$data = strip_tags($data, "<a>"); $d = preg_split("/<\/a>/", $data);
بعد از اون یک متغیربه اسم link$ می سازیم و مقداری براش قرار نمیدیم ، تا بعدا ازش استفاده کنیم .
$links = []; // All Links will be Append To This List.
حالا با یک حلقه میایم تمام لینک هایی که داخل صفحه پیدا کردیمو به اون آرایه اضافه میکنیم .
foreach ($d as $k => $u) { if (strpos($u, "<a href=") !== FALSE) { $u = preg_replace("/.*<a\s+href=\"/sm", "", $u); $u = preg_replace("/\".*/", "", $u); array_push($links, $u); } }
بعد از اینکار باید یک فایل بسازیم که بیاد تمام صفحاتی که ما میخوایم به سمتشون درخواست ارسال کنیم رو دیتا هاشون رو داخلش ذخیره کنیم .
$file_allpage = fopen("website.html", 'a');
حالا یک بار دیگه به همون صفحه اولمون رکوعست ارسال میکنیم که اونو اول داخل فایل ذخیره کنیم .
$homepage = file_get_contents($url); $homepage_replace = str_replace("google", '', $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("google", '', $data); fwrite($file_allpage, $data_replace); } else { continue; }}
حالا باید بیایم دیتاهای داخل اون فایل رو بخونیم و بعد برگردونیمش تا بعدا هر بلایی خواستیم سرش بیاریم .
$file_read = fopen("website.html", "r"); $value = fread($file_read, filesize("website.html")); return $value;
حالا وقت این رسیده که از این کلاس خفن که نوشتیم استفاده کنیم .
include("Controller.php"); $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 "CMS Of This Website: $url " echo "<br>" echo "<br>" $number = 1; foreach ($CMS as $c) { $search = $CRAWL->search($khazesh, $c); if ($search != 'false') { echo $number . ') ' . $c . "<hr>" $number++; } }; unlink('website.html');}
https://t.me/IR_PHP_Developers_Community