شعار proxyscrape داكن

كشط الويب باستخدام لغة برمجة PHP

أدلة إرشادية, إرشادات إرشادات, كشط, 25 ديسمبر-20245 دقائق للقراءة

أصبح كشط الويب أداة أساسية للمطورين ومحللي البيانات الذين يحتاجون إلى استخراج المعلومات من الويب وتحليلها. وسواء كنت تتعقب أسعار المنتجات، أو تجمع البيانات لأغراض البحث، أو تنشئ لوحة تحكم مخصصة، فإن كشط الويب يوفر إمكانيات لا حصر لها.

إذا كنت من عشاق PHP، فإن Goutte هي مكتبة رائعة يجب أن تضعها في اعتبارك لتلبية احتياجاتك في كشط الويب. غوت خفيفة الوزن وسهلة الاستخدام وقوية، وتجمع بين قدرات عميل Guzzle's HTTP من Guzzle مع DomCrawler من Symfony من أجل كشط الويب بسلاسة وكفاءة.

سيأخذك هذا الدليل إلى أساسيات كشط الويب باستخدام PHP باستخدام Goutte - بدءًا منالتثبيت وأول نص برمجيّة إلى التقنيات المتقدمة مثل معالجة النماذج وترقيم الصفحات.

لماذا تختار Goutte لكشط الويب؟

اكتسبت Goutte شعبية بين المطورين لعدد من الأسباب، مما يجعلها واحدة من مكتبات الكشط ل PHP:

  • واجهة برمجة تطبيقات بسيطة ونظيفة: يوفر Goutte واجهة نظيفة وبديهية يسهل تعلمها، حتى بالنسبة للمبتدئين.
  • التكامل السلس: يجمع بين طلبات HTTP وتحليل HTML، مما يلغي الحاجة إلى مكتبات منفصلة.
  • ميزات قوية: يدعم Goutte وظائف متقدمة مثل معالجة الجلسات وإدارة ملفات تعريف الارتباط وإرسال النماذج برمجيًا.
  • سهل الاستخدام للمبتدئين، لكنه قوي: بدءًا من أبسط مهام الكشط إلى المشاريع الأكثر تعقيدًا، فهو يحتوي على كل ما تحتاجه للبدء.

سواء كنت جديدًا على PHP أو مطورًا متمرسًا، فإن Goutte يحقق توازنًا مثاليًا بين البساطة والقوة.

تثبيت غوت

قبل الشروع في البرمجة، تأكد من توفر المتطلبات الأساسية اللازمة:

  • تم تثبيت PHP: تأكد من تثبيت PHP 7.3 أو أعلى على بيئة التطوير لديك. قم بتنزيل PHP مباشرة باستخدام هذا الرابط.
  • تم تثبيت الملحن: الملحن مطلوب لإدارة التبعيات وتثبيت Goutte.

لتثبيت Goutte، ما عليك سوى تشغيل الأمر التالي في جهازك الطرفي:

ملحن يتطلب فاببوت/جوت

بمجرد التثبيت، تحقق من إمكانية الوصول إلى المكتبة من خلال طلب التحميل التلقائي للملحن في مشروعك:

يتطلب 'البائع/autoload.php';

أنت الآن جاهز لبدء الكشط!

أول برنامج نصي لك لكشط الويب باستخدام Goutte

لنبدأ بمثال بسيط. سنقوم بكشط عنوان صفحة ويب باستخدام Goutte. فيما يلي البرنامج النصي الأساسي:

جلب عنوان الصفحة وعرضه

<?php
require 'vendor/autoload.php';

use Goutte\Client;

// Initialize Goutte Client
$client = new Client();

// Send a GET request to the target URL
$crawler = $client->request('GET', 'https://books.toscrape.com/');

// Extract the title of the page
$title = $crawler->filter('title')->text();
echo "Page Title: $title\n";

// Extract the titles of the first 5 books
echo "First 5 Book Titles:\n";
$crawler->filter('.product_pod h3 a')->slice(0, 5)->each(function ($node) {
    echo "- " . $node->attr('title') . "\n";
});
?>

المخرجات:

عنوان الصفحة: جميع المنتجات | كتب للكشط - صندوق الرمل
أول 5 عناوين كتب:
- ضوء في العلية
- قلب المخمل
- الإرسال
- أشياء حادة
- العاقلون: تاريخ موجز للبشرية

الأمر بهذه السهولة! من خلال بضعة أسطر من التعليمات البرمجية، يمكنك جلب وعرض العنوانلأي صفحة ويب.

استخراج البيانات من صفحات الويب

بمجرد أن تتعلم كيفية جلب صفحة ويب، فإن الخطوة التالية هي استخراج بيانات محددة مثل الروابط أو المحتوى من عناصر HTML محددة.

Extracting All Links (`<a>` Tags)

يقوم البرنامج النصي التالي باستخراج التكريم سمات جميع <a> على صفحة ويب:

<?php
require 'vendor/autoload.php';

use Goutte\Client;

$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');

// Extract all <a> tags
$links = $crawler->filter('a')->each(function ($node) {
    return $node->attr('href');
});

// Print all extracted links
foreach ($links as $link) {
    echo $link . "\n";
}

سيؤدي ذلك إلى إرجاع جميع الروابط التشعبية الموجودة في الصفحة.

استخراج المحتوى حسب الفئة أو المعرف

يجعل Goutte من السهل استخراج أو تحليل البيانات من HTML باستخدام الفئة أو بطاقة الهوية المحددات. في هذا المثال، سنستخدم في هذا المثال كتب لكشط الموقع الإلكتروني. على وجه التحديد، سنقوم بكشط المعلومات حول كل كتاب، حيث أنهم يشتركون في نفس الفئة, المنتج_بود. إليك كيفية ظهورها على الموقع الإلكتروني:

إليك مثال على كيفية تحقيق ذلك باستخدام Goutte:

<?php
require 'vendor/autoload.php';

use Goutte\Client;

$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');

// Extract all <a> tags
$links = $crawler->filter('a')->each(function ($node) {
    return $node->attr('href');
});

// Print all extracted links
foreach ($links as $link) {
    echo $link . "\n";
}

// Extract elements with class 'product_pod'
$products = $crawler->filter('.product_pod')->each(function ($node) {
    return $node->text();
});

// Print all extracted product details
foreach ($products as $product) {
    echo $product . "\n";
}

التنقل بين الصفحات

والآن، دعنا نستكشف كيفية التنقل أو ترقيم الصفحات بين الصفحات. في مثال الصفحة التي نستخدمها، يوجد زر "التالي" الذي يسمح بترقيم الصفحات إلى الصفحة التالية. سنستفيد من هذا الزر لتنفيذ ترقيم الصفحات.

أولاً، سنقوم بتحديد موقع الزر باستخدام زر الفئة التي لها قيمة التالي . ضمن هذا العنصر، يوجد <a> التي تحتوي على عنوان URL للصفحة التالية. من خلال استخراج عنوان URL هذا، يمكننا استخدامه لإرسال طلب جديد والانتقال بسلاسة إلى الصفحة التالية، وفيما يلي مظهر وبنية HTML لعلامة التالي على الصفحة.

إليك ما يبدو عليه الرمز الذي يحقق ذلك:

<?php
require 'vendor/autoload.php';

use Goutte\Client;

$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');

// Handle pagination using the 'next' button
while ($crawler->filter('li.next a')->count() > 0) {
    $nextLink = $crawler->filter('li.next a')->attr('href');
    $crawler = $client->request('GET', 'https://books.toscrape.com/catalogue/' . $nextLink);
    
    // Extract and print the current page URL
    echo "Currently on: " . $crawler->getUri() . "\n";
}

باستخدام هذا الأسلوب، يمكنك أتمتة التنقل بين الصفحات ومتابعة كشط البيانات.

التعامل مع النماذج مع Goutte

Goutte قادر أيضًا على التعامل مع النماذج. لتوضيح هذه الوظيفة، سنستخدم هذا الموقع الإلكتروني، الذي يحتوي على حقل إدخال واحد، كما هو موضح في الصورة أدناه:

إليك ما يبدو عليه رمز إرسال هذا النموذج:

<?php
require 'vendor/autoload.php';

use Goutte\Client;

$client = new Client();
$crawler = $client->request('GET', 'https://www.scrapethissite.com/pages/forms/');

// Submit the search form with a query
$form = $crawler->selectButton('Search')->form();
$form['q'] = 'Canada';

$crawler = $client->submit($form);

// Extract and print the results
$results = $crawler->filter('.team')->each(function ($node) {
    return $node->text();
});

foreach ($results as $result) {
    echo $result . "\n";
}

يقوم هذا البرنامج النصي بملء حقل في النموذج باسم q بالقيمة كشط الويب وإرساله. من هنا، يمكنك استخراج المحتوى من صفحة نتائج البحث تمامًا كما في الأمثلة السابقة.

معالجة الأخطاء وأفضل الممارسات

معالجة أخطاء الشبكة

أضف دائمًا معالجة الأخطاء لإدارة المواقف غير المتوقعة مثل فشل الاتصال بالشبكة أو عناوين URL غير موجودة.

<?php
require 'vendor/autoload.php';

use Goutte\Client;

$client = new Client();

try {
    $crawler = $client->request('GET', 'https://invalid-url-example.com');
    echo "Page title: " . $crawler->filter('title')->text();
} catch (Exception $e) {
    echo "An error occurred: " . $e->getMessage();
}
}

احترام Robots.txt

يجب دائمًا إجراء عملية تجريف الويب بطريقة أخلاقية ومسؤولة. ملف "robots.txt" هو ملف نصي بسيط تستخدمه مواقع الويب للتواصل مع برامج زحف الويب، ويحدد أجزاء الموقع التي يمكن أو لا يمكن الوصول إليها. قبل الكشط، من المهم التحقق من ملف "robots.txt" للتأكد من أنك تتبع قواعد الموقع وتحترم شروطه. يمكن أن يؤدي تجاهل هذه الإرشادات إلى مشاكل قانونية وأخلاقية، لذلك اجعل هذه الخطوة دائمًا أولوية في عملية الكشط.

اقرأ المزيد عن الروبوتات.txt هنا.

تحديد المعدل

كن مهذباً وتجنب إرسال الكثير من الطلبات في فترة زمنية قصيرة، لأن ذلك قد يثقل كاهل الخادم ويعطل أداءه بالنسبة للمستخدمين الآخرين. من الممارسات الجيدة تضمين فترة تأخير قصيرة بين كل طلب وآخر لتقليل الحمل على الخادم وضمان قدرته على التعامل مع حركة المرور بكفاءة. إن اتخاذ هذه الخطوات لا يساعد فقط في الحفاظ على استقرار الخادم، بل يُظهر أيضًا الاستخدام المسؤول والمراعي للموارد المشتركة.

سكون(1// انتظر ثانية واحدة بين الطلبات

المزالق الشائعة

  • تعتمد العديد من المواقع الإلكترونية الحديثة على جافا سكريبت لتحميل المحتوى، مما يعني أن أدوات الكشط التقليدية قد لا تلتقط جميع البيانات التي تحتاجها. يمكن لأدوات مثل Puppeteer أو Selenium محاكاة تفاعلات المستخدم وتحميل المحتوى كما يفعل المتصفح.
  • تأكد من أن نقاط نهاية HTTPS التي تقوم بكشطها تعرض شهادات صالحة لتجنب الأخطاء. يمكن للشهادات غير الصالحة أو منتهية الصلاحية أن تتسبب في فشل الكاشطة أو تثير مخاوف أمنية. تحقق دائمًا من حالة الشهادة قبل الكشط وفكر في استخدام المكتبات التي تتعامل مع هذه المشكلات بسلاسة.

الخاتمة

يعد كشط الويب أداة قوية لجمع البيانات بكفاءة، ولكنه يتطلب نهجًا مسؤولاً ومدروسًا لتجنب المزالق الشائعة وضمان الاستخدام الأخلاقي. من خلال الالتزام بأفضل الممارسات مثل احترام شروط خدمة الموقع الإلكتروني، وتنفيذ التأخير المناسب بين الطلبات، واستخدام أدوات قادرة على التعامل مع المحتوى الديناميكي، يمكنك إنشاء مكشطة تعمل بفعالية مع تقليل التأثير على الخوادم. وبالإضافة إلى ذلك، فإن التحقق من شهادات HTTPS ومراعاة الاعتبارات الأمنية سيحمي مكشطة الويب الخاصة بك وأي بيانات تجمعها. مع التخطيط والتنفيذ المناسبين، يمكن أن يصبح كشط الويب موردًا لا يقدر بثمن للبحث والتحليل والابتكار.