مقدمة: لماذا 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لبدء العمل، ستحتاج إلى PHP إصدار 7.4 أو أعلى مع إضافتي curl و dom. يمكنك التحقق من وجودهما كالتالي:
php -m | grep -E "curl|dom"\n\nإذا كان الناتج فارغاً، قم بتثبيتهما عبر مدير الحزم:
\n\nsudo 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 للانتقال التلقائي عبر إعادة التوجيه.
مثال 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,