تجريف واستخراج البيانات باستخدام PHP: من البداية إلى الاحتراف

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا PHP هي الأداة المثالية لاستخراج البيانات

\n\n

عندما نتحدث عن استخراج البيانات من المواقع، يفكر الكثيرون فوراً في Python مع مكتباتها مثل BeautifulSoup أو Scrapy. لكن لنكن صادقين: PHP موجود على كل خادم ثانٍ تقريباً، وإذا كان مشروعك يعمل بالفعل على PHP، فمن غير المنطقي إضافة مجموعة كاملة من Python لمهمة استخراج بيانات واحدة. PHP يتعامل بشكل ممتاز مع جمع البيانات، خاصة عندما تحتاج إلى معالجة سريعة لـ HTML أو JSON، أو الوصول إلى API، أو سحب المحتوى من عشرات الصفحات.

\n\n

في موقع pythonlib.ru اعتدنا التحدث عن Python، لكننا اليوم سنستثني ذلك. لأن PHP ليس مجرد لغة لـ"مواقع بطاقات العمل". إنها أداة قوية لاستخراج بيانات الويب، قادرة على العمل مع cURL وDOMDocument وXPath وحتى محاكاة سلوك المتصفح. في هذا المقال، سنشرح بأمثلة عملية كيفية استخراج البيانات من المواقع باستخدام PHP، وتجنب الحظر، ومعالجة المحتوى الديناميكي.

\n\n

إذا كنت ترغب يوماً في جمع أسعار المنافسين، أو الأخبار، أو جهات الاتصال تلقائياً، فأنت في المكان الصحيح. هيا بنا!

\n\n

استخراج البيانات وتجريفها: ما الفرق؟

\n\n

قبل كتابة الكود، دعنا نوضح المصطلحات. استخراج البيانات باستخدام PHP هو عملية استخلاص معلومات منظمة من HTML أو XML أو JSON. أما تجريف البيانات باستخدام PHP فهو مفهوم أوسع يشمل تحميل الصفحة، وتجاوز الحماية، واستخراج البيانات. ببساطة: الاستخراج هو "قراءة"، بينما التجريف هو "تنقيب".

\n\n

في PHP، سنحتاج إلى أداتين رئيسيتين للتجريف:

\n
    \n
  • cURL — لإرسال طلبات HTTP والحصول على ردود من الخادم
  • \n
  • DOMDocument أو SimpleXML — لتحليل HTML/XML المستلم
  • \n
\n\n

يمكن استخدام مكتبات إضافية (سنناقشها لاحقاً)، لكن في البداية تكفي الدوال المدمجة.

\n\n

تثبيت وتجهيز البيئة

\n\n

لبدء العمل، ستحتاج إلى PHP إصدار 7.4 أو أعلى مع إضافتي curl و dom. يمكنك التحقق من وجودهما كالتالي:

\n\n
php -m | grep -E "curl|dom"
\n\n

إذا كان الناتج فارغاً، قم بتثبيتهما عبر مدير الحزم:

\n\n
sudo apt install php-curl php-xml
\n\n

كل شيء جاهز. الآن لننشئ أول سكربت لاستخراج البيانات من موقع.

\n\n

مثال 1: استخراج بسيط باستخدام cURL وDOMDocument

\n\n

لنفترض أننا نريد جمع عناوين المقالات من مدونة. لنكتب كوداً بسيطاً لكنه عملي:

\n\n
<?php\n// الرابط المراد استخراج البيانات منه\n$url = 'https://example-blog.com';\n\n// تهيئة cURL\n$ch = curl_init($url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);\ncurl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');\n\n$html = curl_exec($ch);\ncurl_close($ch);\n\n// إنشاء DOMDocument وتحميل HTML\n$dom = new DOMDocument();\nlibxml_use_internal_errors(true); // تجاهل أخطاء تحليل HTML\n$dom->loadHTML($html);\nlibxml_clear_errors();\n\n// استخدام XPath للبحث عن عناوين h2\n$xpath = new DOMXPath($dom);\n$titles = $xpath->query('//h2');\n\nforeach ($titles as $title) {\n    echo $title->nodeValue . "\\n";\n}\n?>
\n\n

لاحظ أننا قمنا بتعيين User-Agent — هذا هو الحد الأدنى من الحماية ضد الحظر. بدونه، غالباً ما ترجع المواقع خطأ 403. نستخدم أيضاً CURLOPT_FOLLOWLOCATION للانتقال التلقائي عبر إعادة التوجيه.

\n\n

مثال 2: التعامل مع النماذج وطلبات POST

\n\n

غالباً ما تكون البيانات مخفية خلف نموذج بحث أو تسجيل دخول. استخراج البيانات باستخدام PHP يسمح بمحاكاة إرسال النموذج:

\n\n
<?php\n$url = 'https://example.com/search';\n$postData = http_build_query([\n    'query' => 'PHP scraping',\n    'submit' => 'Search'\n]);\n\n$ch = curl_init($url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_POST, true);\ncurl_setopt($ch, CURLOPT_POSTFIELDS,                

المدونات

توصيات الكتب