وب اسکرپینگ با php به چه صورت است؟
وب اسکرپینگ با php
در عصر حاضر کار با دیتا به یکی از مهمترین و حیاتیترین مهارتها تبدیل شده است. سایتهایی که از وب نسل ۳ حمایت میکنند با دنبال کردن مسیر کاربران و جمعآوری دیتای حاصل از فعالیت آنها در وب، پیشنهادات مخصوصی برای هر فرد ارائه میکنند. کسبوکارها نیز خصوصا در حوزه دیجیتال، قبل از ورود به بازار یا توسعه محصولات جدید نیاز به انجام تحقیقات بازار (Market Reaserch) دارند. در ادامه با مبحث وب اسکرپینگ با php با ما همراه باشید.
ویدیو پییشنهادی : آموزش وب اسکرپینگ با پایتون (web scraping)
همهی این موارد بیانگر وجود نیازی شدید برای استخراج دیتا از صفحات مختلف اینترنتی است. این کار اگر بنا باشد به صورت تکی و با copy & paste انجام شود، زمان زیادی تلف کرده و بهینه نخواهد بود. با وب اسکرپینگ میتوان استخراج دیتا از سایتهای مختلف را به صورت یک اتوماسیون تعریف کرد و به جای وقت گذاشتن روی جمعآوری اطلاعات، بر تحلیل و استفاده از آنها تمرکز کرد.
چرا وب اسکرپینگ نیاز روز است؟
فرض کنید یک کسبوکار قرار است محصول یا خدمت جدیدی را به بازار عرضه کند. اولین مرحلهای که باید انجام شود جمعآوری اطلاعات از رقیبان (کسانی که در حال حاضر آن محصول یا خدمت را ارائه میکنند) است. همچنین مطالعه نظرات کاربران در صفحاتی که آن محصول یا خدمت ارائه شده است، به سازمان کمک میکند نیازهای روز مشتریان را شناخته و بر روی ارضای آنها تمرکز ویژه بگذارد. با توجه به گسترده بودن دنیای اینترنت و وجود هزاران صفحه برای برخی محصولات (مثلا مانیتور یا گوشی هوشمند)، بررسی تکتک این صفحات برابر با هدر رفتن ساعتهای بسیاری از نیروی انسانی هر شرکت است.
از طرف دیگر، رقبا اطلاعات خود را به راحتی در دسترس همگان قرار نمیدهند. برای دسترسی بهینه و اثربخش به این اطلاعات، تنها راهکار موجود وب اسکرپینگ (Web Scraping) خواهد بود. این کار در حال حاضر به صورت گسترده و در سطح جهانی مورد استفاده قرار میگیرد.
در اکوسیستم کسبوکارهای آنلاین و استارتاپها، بهره نبردن از وب اسکرپینگ برابر با عقب بودن در رقابت سنگین بر سر کار با دادهها است. وب اسکرپینگ به شما کمک میکند انبوهی از اطلاعات در یک زمینه خاص جمعآوری کرده و تمرکز و انرژی خود را به جای جمعآوری روی تحلیل آن قرار دهید.
ویدیو پییشنهادی : آموزش پایتون
وب اسکرپینگ چیست؟
برای تعریف این پدیده ابتدا بهتر است معنای لغوی آن را بدانیم. Scraping به معنای تراشیدن و پنچه انداختن میباشد. Web Scraping نیز بر همین اساس معادل است با «تراشیدن بخشی از اطلاعات موجود در صفحه وب» یا «پنجه انداختن به قصد برداشتن بخشی از دیتا». در هر صورت با مفهومی روبرو هستیم که به استخراج دیتای موجود در صفحات وب اشاره دارد. در ادامه با انواع وب اسکرپینگ آشنا میشویم:
- دستی: همان روشی که یک دانشجو برای یک تحقیق کلاسی ساده استفاده میکند. محبوبترین روش وب اسکرپینگ در بین افراد عادی همین روش است.
- تجزیه DOM: این امکان از طریق مرورگرها برای همه فراهم شده است. هر فرد میتواند صفحات وب را با استفاده از درخت Document Object Model یا DOM تجزیه کرده و اطلاعات موجود در آن را تماما استخراج کند. کار DOM بیان ساختار یک فایل HTML یا XML است. DOM به صورت افزونه در PHP موجود است.
- عبارات معمول: «عبارت معمول» به یک رشته (String) اشاره دارد که به دنبال آن در صفحات وب میگردیم. درست شبیه به روال کاری موتورهای جستجو که عبارت نوشته شده را در وب یا یک سایت خاص جستجو میکنند. تکنیک عبارات معمول (Regular Expressions) یک تکنیک ساده و بسیار کاربردی است.
- تکنیکهای دیگری نیز همچون تجمیع عمودی، تجزیه HTML و تشخیص حاشیهنویسی معنایی وجود دارند اما در PHP همان سه مورد اول بیشترین کاربرد را خواهند داشت.
نکاتی که باید به آن ها توجه کرد
- اگرچه در ایران هنوز قانونی در منع این پدیده وجود ندارد، کشورهای پیشرفته به صورت جدی با موارد غیرقانونی برخورد میکنند. پس اگر به کار در خارج از کشور فکر میکنید باید حواستان به خطوط قرمز و حقوق معنوی در مورد مالکیت اطلاعات باشد.
- برخی از سایتها در جهت مقابله با برداشته شدن اطلاعاتشان، تمهیداتی را اندیشیدهاند و مثلا ممکن است آدرسهای آیپی شما پس از تلاش برای استخراج اطلاعات بلاک شود.
- ممکن است برنامه شما در حلقهای بیپایان بیفتد و سیستم شما با مشکل مواجه شود.
- بهینه بودن کد از اهمیت بالایی برخوردار است.
وب اسکرپینگ با php
Php یکی از پرکاربردترین و محبوبترین زبانهای برنامهنویسی در چند سال اخیر است. سرعت بالا، امکانات متنوع و یادگیری سریع از مهمترین دلایل این محبوبیت به حساب میآیند. وب اسکرپینگ را میتوان از طریق کد نوشتن در فضاها و زبانهای مختلف انجام داد اما انجام آن با php انتخاب بیشتر برنامهنویسان وب و موبایل است. در php وب اسکریپنگ با استفاده از دو کتابخانه صورت میگیرد:
Simple HTML DOM
یک تجزیهگر (Parser) که با استفاده از درخت DOM صفحات وب را تجزیه میکند. این تجزیهگر با PHP5+ سازگاری داشته و علاوه بر سهولت استفاده، برای تجزیه فایلهای خراب (Invalid HTML) نیز به کار میآید. حجم کدنویسی برای استفاده از این کتابخانه نیز بسیار کم بوده و از همین جهت محبوبیت بالایی دارد.
SimpleXMLElement
فایلها برای خوانده شدن باید به شکل خاصی درآیند. کار این کتابخانه تبدیل فایل XML به ساختار داده (Data Structure) است. این کتابخانه نیز با PHP5+ سازگاری دارد.
پیش نیازهای وب اسکرپینگ در PHP
- PHP 5+ یا ۷+
- شناخت اساسی نسبت به زبان PHP و نسبت به HTML
- تجزیهگر HTML DOM
وب اسکرپینگ با php کار زیاد سختی نیست اما باز هم نیاز به شناخت نسبی PHP وجود خواهد داشت. از طرف دیگر باید با تگهای HTML نیز آشنا باشید و در غیر این صورت برای تجزیه و استفاده از اطلاعات با مشکل مواجه خواهید شد.
شناخت لازم از HTML
- زبانی برای طراحی صفحات وب است
- مبتنی بر نشانهگذاری و توصیف صفحات وب با استفاده از آنهاست
- یک سری المان (Element) دارد که صفحات وب از آنها ساخته میشوند
- این المانها توسط یک سری تگ شناخته میشوند
- معروفترین تگها “Heading” و “Body” هستند
- این تگها به کاربر نشان داده نمیشوند و تنها با نفوذ به لایه زیرین صفحه قابل دسترسی خواهند بود
مراحل وب اسکرپینگ در PHP
قدم صفر، نصب تجزیه گر:
گفتیم که تجزیه صفحات جهت استخراج دیتای آنها توسط HTML DOM Parser انجام میشود. قبل از هرکاری باید این تجزیهگر را بر روی سیستم خود نصب نمایید (برای دانلود میتوانید از این لینک استفاده کنید). پس از دانلود تنها کافی است فایل زیپ را Extract کرده تا به پوشهای با نام “Simple_Dom” برسید.
قدم یک: ایجاد فایل و استفاده از کتابخانه
در این مرحله لازم است فایلی با نام Scraper.php ایجاد کرده و دستور زیر را در آن بنویسید:
<?php
require_once ‘simple_html_dom.php’;
از این طریق کتابخانه مورد نظر وارد عمل میشود. سپس پوشهای با نام “Simple_dom” ایجاد کرده و فایل Scraper.php را درون آن کپی کنید.
قدم دو:معرفی صفحه مورد نظر
حالا باید صفحهای که قرار است مورد تجزیه قرار بگیرد را به PHP معرفی کنیم. برای این کار دستورات زیر را نوشته و به جای URL آدرس صفحه مورد نظرمان را میگذاریم.
<?php
require_once ‘simple_html_dom.php’;
//get html content from the site.
$dom = file_get_html(‘URL‘, false);
همانطور که میبینید “Simple_HTML_DOM” جهت تجزیه کردن صفحه مورد نظر فراخوانده شد. این چند خط اطلاعات را از صفحه مورد نظر میگیرد. اما معمولا فقط به بخشی از صفحه (بخش کامنتها برای مثال) نیاز است. برای همین لازم است خطوط دیگری نوشته شوند.
قدم سه: نوشتن کد برای استخراج بخش مورد نظر
اینجاست که شناخت شما نسبت به HTML و CSS به کار خواهد آمد. ابتدا لازم است تا کد صفحه را ببینید. برای این کار کافی است صفحه مورد نظر را در مرورگر باز کرده و روی بخشی از آن راست کلیک کنید. سپس اگر از کروم استفاده میکنید روی View Page Source و در صورت استفاده از موزیلا بر روی Inspect Elements کلیک کنید تا کد HTML به نمایش درآید.
در طراحی صفحات وب از کلاسهای CSS استفاده میشود. در واقع هر بخش صفحه با نام کلاس CSS و شماره id قابل شناسایی است. برای استخراج اطلاعات آن بخش نیز تنها کافی است از طریق همین ویژگیها، آن را به php معرفی کنیم. مثلا برای استخراج قسمت نقدها در سایت imdb ابتدا به کد صفحه مراجعه کرده و این بخش را تحت کلاس review-container مییابیم. تمام زیر مجموعههای این بخش (تعداد ستاره، عنوان و…) تحت نام همین کلاس قرار دارند. برای استخراج دیتاهای موجود در این بخش کافی است کد زیر را در php وارد کنیم:
//collect all user’s reviews into an array
$answer = array();
if(!empty($dom)) {
$divClass = $title = ”;$i = 0;
foreach($dom->find(“.review-container”) as $divClass) {
//title
foreach($divClass->find(“.title”) as $title ) {
$answer[$i][‘title’] = $title->plaintext;
}
//ipl-ratings-bar
foreach($divClass->find(“.ipl-ratings-bar”) as $ipl_ratings_bar ) {
$answer[$i][‘rate’] = trim($ipl_ratings_bar->plaintext);
}
//content
foreach($divClass->find(‘div[class=text show-more__control]’) as $desc) {
$text = html_entity_decode($desc->plaintext);
$text = preg_replace(‘/\'/’, “‘”, $text);
$answer[$i][‘content’] = html_entity_decode($text);
}
$i++;
}
}
print_r($answer); exit;
تمام اطلاعات در نهایت به صورت آرایه و در $answer ذخیره میشوند. این آرایه اصطلاحا پرینت شده و از اطلاعات آن در ادامه استفاده میشود.
قدم چهار: ذخیره دادههای به دست آمده در فایل XML
در این مرحله باید آرایه به دست آمده در مرحله قبل را تبدیل به المان XML کنیم. با این تبدیل میتوان نتیجه را در یک فایل XML ذخیره کرده و در ادامه از اطلاعات به طرز دلخواه استفاده کرد. اینجاست که کتابخانه SimpleXMLElement که پیشتر به آن اشاره کردیم به کار میآید. برای این کار در همان مثال IMDB کد به شکل زیر خواهد بود:
//function definition to convert array to xml
function array_to_xml($array, &$xml_user_info) {
foreach($array as $key => $value) {
if(is_array($value)) {
$subnode = $xml_user_info->addChild(“Review$key”);
foreach ($value as $k=>$v) {
$xml_user_info->addChild(“$k”, $v);
}
}else {
$xml_user_info->addChild(“$key”,htmlspecialchars(“$value”));
}
}
return $xml_user_info->asXML();
}
//creating object of SimpleXMLElement
$xml_user_info = new SimpleXMLElement(“<?xml version=\”۱٫۰\”?><root></root>”);
//function call to convert array to xml and return whole xml content with tag
$xmlContent = array_to_xml($answer,$xml_user_info);
در این قطعه کد ابتدا یک شی از کلاس SimpleXMLElement تعریف کرده و سپس آن را درون یک تابع با نام “Array_to_XML” قرار میدهیم. اطلاعات در متغیر “$xmlContent” به صورت آرایه ذخیره میشود.
در ادامه با دستورات زیر یک فایل XML ساخته و نتایج را در آن ذخیره میکنیم:
// Create a xml file
$my_file = ‘AvengersMovieReview.xml’;
$handle = fopen($my_file, ‘w’) or die(‘Cannot open file: ‘.$my_file);
//success and error message based on xml creation
if(fwrite($handle, $xmlContent)) {
echo ‘XML file have been generated successfully.’;
}
else{
echo ‘XML file generation error.’;
}
?>
قدم نهایی: ایجاد اتوماسیون
مثالی که بررسی شد تنها استخراج از یک صفحه خاص بود و هدف از بررسی آن آشنایی با روال کدنویسی بود. در پروژههای واقعی شما نیازمند انجام اتوماتیک وب اسکرپینگ روی تعداد زیادی صفحه وب به صورت اتوماتیک خواهید بود. برای این کار روشهای مختلفی وجود دارد و انتخاب از بین آنها وابسته به حجم کاری، تجربه و انتخابهای برنامهنویس است.
استفاده از حلقهها یکی از سادهترین راههای موجود است اما نیاز به سیستمی قدرتمند از لحاظ توان پردازش و سرعت پردازش دارد. گفتنی است که لینوکس برای این کار به مراتب از ویندوز گزینه مناسبتری خواهد بود و سازگاری بیشتری با پردازشهای موازی و در پسزمینه دارد.
نتیجه گیری
دنیای امروز شبیه به ساختمانی است که پایههای آن را اطلاعات تشکیل دادهاند. برای انجام هر حرکت و اجرای هر ایدهای در چنین دنیایی نیاز به استخراج و استفاده بهینه از اطلاعات خواهیم داشت. به همین دلیل است که وب اسکرپینگ به بخش جداییناپذیر از سازمانهای امروزی خصوصا سازمانهای فعال در حوزه اینترنت بدل شده است. این کار با روشها و زبانهای مختلف صورت میپذیرد. Php یکی از زبانهایی است که برای وب اسکرپینگ توسط برنامهنویسان مورد استفاده قرار میگیرد.
در این مطلب بر توضیح وب اسکرپینگ با php، چیستی آن و چگونگی انجام آن با زبان php تمرکز کردیم. مهمترین اصل در این زمینه اجرای بهینه کد و اجرای خودکار اسکریپت است. اگر تجربهای در این زمینه دارید یا پیشنهادی در مورد این مطلب به ذهنتان میرسد با ما در میان بگذارید. امیدواریم این مقاله به حد کافی برای شما مفید بوده باشد.