آموزش ساخت یک web scraper حرفه ای با php ( استخراج اطلاعات سایت )
web scraper حرفه ای با php – تاکنون کلمه خزنده وب یا استخراج اطلاعات صفحه وب را شنیده اید
بدین معنا که می توانید محتویات و داده های یک وبسایت را به صورت کامل استخراج کرده و استفاده کنید .
هم چنین با نام web crawler هم شناخته می شود .
کاربرد های Web Scraper
نمایش اطلاعات بورس
نمایش اطلاعات فروشگاه اینترنتی ( دیجیکالا ، مالتینا )
نمایش اطلاعات نیازمندی های آنلاین ( دیوار ، شیپور )
نمایش اطلاعات حساب کاربری
و …
شروع کار با Web Scraper
برای شروع به PHP 7.2 یا بالاتر و کتابخانه html parser با نام paquettg/php-html-parser نسخه 3.1.1 یا بالاتر نیاز دارید .
برای شروع ابتدا کتابخانه را با استفاده از composer نصب کنید .
composer require paquettg/php-html-parser
فایل index.php برای دریافت اطلاعات category دیجیکالا
قبل از چیز بهتر است از کارایی چند دستور باخبر شوید :
loadStr : بارگذاری html از طریق رشته به طور مستقیم .
find : جستجو در میان المنت های مختلف html معادل querySelector جاوا اسکریپت است .
getAttribute : دریافت attribute های html
شرح کارایی اسکریپت پایین : دقت داشته باشید که کد پایین فقط برای دیجیکالا تا زمانی که ساختار صفحه category تغییر نکند قابل اجرا هست .
<!DOCTYPE html> <html lang="fa"> <head> <meta charset="UTF-8"> <title>Rapidcode.iR - سورس کد</title> <link rel="stylesheet" href="static/css/main.css"> </head> <body> <div class="container"> <a id="introduce" href="https://rapidcode.ir" target="_blank">رپید کد • کتابخانه مجازی برنامه نویسان</a> <h1>محصولات دیجیکالا</h1> <p>این اسکریپت فقط جنبه آموزشی داشته و هرگونه بهره برداری مالی باید توسط دیجیکالا تایید گردد .</p> <?php require "vendor/autoload.php"; use PHPHtmlParser\Dom; if (!empty($_POST['crawlUrl'])) { $dom = new Dom; $raw_html = file_get_contents($_POST['crawlUrl']); $dom->loadStr($raw_html); $products = $dom->find("ul.c-listing__items.js-plp-products-list li .c-product-box"); foreach ($products as $product) { $title = $product->getAttribute("data-title-fa"); $link = "https://www.digikala.com{$product->find('.js-product-url')->getAttribute("href")}"; $thumbnail = $product->find('.c-promotion-box__image img')->getAttribute("src"); $onsale = "---"; $rate = "---"; if (!empty($product->find('.c-promotion__badge.c-promotion__badge--special-sale')[0])) $onsale = $product->find('.c-promotion__badge.c-promotion__badge--special-sale')->outerhtml; if (!empty($product->find('.c-product-box__engagement-rating')[0])) $rate = $product->find('.c-product-box__engagement-rating')->outerhtml; $price = $product->find('.c-price')->outerhtml; $vendor = $product->find('.c-product__main-seller.js-seller-text')->outerhtml; echo "<div class=\"product-box\"><div id=\"onsale\">{$onsale}</div><img id=\"thumbnail\" src=\"{$thumbnail}\" alt=\"{$title}\"><h2 id=\"head1\"><a href=\"{$link}\">{$title}</a></h2><div id=\"rating\">{$rate}</div><div id=\"price\">{$price}</div><div id=\"vendor\">{$vendor}</div></div>"; } } else { ?> <form action="" method="post"> <input type="url" name="crawlUrl" id="crawlUrl" placeholder="(;"> <input type="submit" value="ثبت"> </form> <?php } ?> </div> </body> </html>
فایل main.css ظاهر بهتر برنامه
.container{ margin: 0 auto; width: 80%; text-align: center; direction: rtl; } #introduce{ display: block; width: 100%; font-size: 35px; font-weight: bold; color: white; padding-bottom: 5px; background-color: #4CAF50; text-decoration: none; margin-bottom: 15px; } /* Page Style */ .product-box{ width: 30%; margin-left: 1%; float: right; border: 2px solid #03a9f4; margin-bottom: 15px; } .product-box #onsale div{ background-color: mediumslateblue; color: white; } .product-box #thumbnail{ width: 90%; margin: 5px auto; } .product-box #head1{ font-size: 17px; height: 40px; } .product-box #head1 a{ color: #ff9800; text-decoration: none; } .product-box #rating{ text-align: left; padding-left: 5px; } .product-box #price{ font-weight: bold; font-size: 14px; color: white; margin: 5px 0; padding: 5px 0; background-color: #4caf50; height: 27px; overflow-y: scroll; } .product-box #vendor{ text-align: right; margin: 3px 10px; }
خروجی برنامه ( نتیجه )
این پروژه فقط جنبه آموزشی داشته و هیچ گونه منفعت مالی ندارد .
دانلود پروژه دریافت داده های دیجیکالا
پس از دانلود برنامه وارد مسیر اصلی شده و دستور composer install را اجرا کنید .
web scraper حرفه ای با php
لیست نظرات
مرسی از آموزش خوبتون .میشه درباره توییتر هم توضیحی بدید که چطوری میشه مثلا آخرین پست یه آیدی یا تعداد فالور و پست هاش هر چند ساعت یکبار دریافت کرد. حتما باید api توییتر داشته باشیم ( اگر آره میشه آموزشش رو بدید ) یا با curl , file_get_contents و یا web scraper و هر تابعی از این دست هم میشه .؟
درود ، شما هم می تونید از api استفاده کنید و هم می تونید از کتابخانه های مخصوص php به عنوان web scraper استفاده کنید که session رو هم در داخل خودش ذخیره می کنه و می تونید با اون اطلاعات زیادی از twitter استخراج کنید در آینده شاید در مورد یک همچین موضوعی آموزشی رو منتشر کنم .
مرسی از اموزش خوبتون. موفق باشید❤