تجريف البيانات

2020-02-01

في أيلول سبتمبر الماضي قضت محكمة الاستئناف التاسعة في الولايات المتحدّة بشرعية تجريف البيانات من مواقع الويب Web scraping. القانون منع المنافسين أيضًا من محاولة إزالة البيانات - التي جُرّفت من مصادرهم - من المواقع الأخرى، طالما أن تلك المصادر مفتوحة للعلن.

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

لكن ما هو تجريف البيانات؟

هو عبارة عن استخدام برامج لاستخراج البيانات والمعلومات من مواقع الويب، بغرض معالجتها أو عرضها بشكل آخر.

بعبارة ثانية؛ ما الذي يمكن القيام به لقراءة آخر الأخبار من مصدرك المفضّل؟

إما أن تذهب إلى موقع الويب الخاص بهم لتتصفح جديد المحتويات هناك. في اللغة التخصصيّة نقول، أنك نفّذت أمر جلب GET عبر بروتوكول HTTP باستخدام متصفحك إلى سيرفر الموقع، والذي سيُرسل لك صفحة ويب تتضمن أكودًا كثيرة، يستطيع المتصفح قراءتها، ثم تفسيرها وعرضها لك بالشكل الذي تراه. على سبيل المثال عبر الضغط على Ctrl + U يمكن مُشاهدة الكود المصدري لهذه الصفحة الذي يُرسله السيرفر الخاص بي إلى متصفحك.

الخيار الآخر يتمثّل بمتابعة الموقع عبر قارئ خلاصات RSS.

في الحالة الأولى أنت ذهبت إلى الموقع، أما في الحالة الثانية فالمحتويات هي التي جاءت إليك عبر تطبيق RSS (الشيء ذاته صحيح في حال كنتَ تستخدم تويتر لمتابعة الأخبار بدلًا من RSS).

هل هناك إمكانيات أخرى؟ أجل هناك إمكانيتان رئيسيتان يستخدمهما عادةً المبرمجون والهاكرز للحصول على المحتويات التي يهتمون بها (سواءً لأغراض شخصية أو تجارية).

واجهة برمجة التطبيقات

تُقدّم بعض المواقع بياناتها عبر ما يُسمى بواجهة برمجة التطبيقات API وهي مصادر يمكن مخاطبتها (برمجيًا) للحصول على البيانات والتفاعل مع المواقع.

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

واجهة برمجة التطبيقات تُعيد لك البيانات بشكل منظّم وجاهز للاستخدام. لنتخيل أنك أجريت طلبًا عبر برنامجك للحصول على حالة الطقس من إحدى الخدمات الشهيرة. الردّ سيكون على الشكل التالي:

- المدينة: حمص
|
| -- الإحداثيات الجغرافية
| ---- خط الطول: 36.713696
| ---- خط العرض: 34.732426
|
| -- حالة الطقس
| ---- الملخص: مشمس
| ---- درجة الحرارة: 30
| ---- الرطوبة: 93
| ---- الضغط الجوي: 1020

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

تجريف البيانات

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

لتجريف البيانات أنت تحتاج لعدّة تطبيقات أو خطوات:

  • أولًا تطبيق قادر على إرسال طلب جلب GET عبر بروتوكول HTTP بالنيابة عنك. (لن تزور الموقع يدويًا).
  • ثانيًا تطبيق يمكنه تحليل الأكواد التي ستحصل عليها من السيرفر (لا تنسَ أنك لا تستخدم المتصفح فهو لن يُساعدك في ذلك).
  • ثالثًا استخراج المعلومات المطلوبة من الأكواد التي تم تحليلها ثم عرضها أو تخزينها في ملف ما.

كيف يبدو ذلك؟

إن كنتَ تستخدم نظام لينكس ومهتمًا بإلقاء نظرة على كيف يبدو تجريف البيانات فتابع هذه الفقرة الشيّقة!

سوف نستعمل هنا الطرفية لتجريف البيانات. سنستخدم الأداة wget والتي تجلب البيانات عبر بروتوكول HTTP، والأداة html-xml-utils التي تتضمن عددًا من الأوامر لتحليل الأكواد واستخراج المعلومات المطلوبة. في المثال التالي سنستعمل الأمرين hxnormalize وَ hxselect من هذه الأداة. أخيرًا سوف نستعمل الأداة Lynx وهو متصفح بسيط لتحويل الأكواد المطلوبة إلى نص مقروء.

على دبيان وأوبونتو يمكن تثبيت جميع الحزم السابقة بالأمر التالي:

sudo apt install wget html-xml-utils lynx

لو زرتَ موقع البي بي سي ستجد أن أحد الزوايا تُدعى Editor’s Picks. لنفترض أننا نرغب بجلب عناوين وروابط هذه الزاوية إلى جهازنا وتخزينها في ملف يُدعى editors-picks.txt لتحقيق ذلك سنكتب في الطرفية:

echo "http://www.bbc.com" | 
wget -O- -i- | 
hxnormalize -x | 
hxselect -i ".editors-picks" |
lynx -stdin -dump > editors-picks.txt

الرمز | يُدعى بايب في الطرفية، ويستخدم لوصل الأوامر مع بعضها البعض. في البداية قمنا بطباعة رابط الموقع، وتمريره إلى الأداة wget لجلب محتوياته، مررنا هذه المحتويات إلى الأمر hxnormalize لتنظيمها ثم مررنا هذه المحتويات المنظمة إلى الأداة hxselect التي ستبحث ضمنها عن الأكواد التي تحمل Class باسم editors-picks (لا يهم كثيرًا الآن ما يعني ذلك)، وأخيرًا مررنا الناتج إلى المتصفح البسيط الخاص بنا lynx ، والذي بدوره سيعالج تلك الأكواد ويطبع الناتج في الملف editors-picks.txt!

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

عن طريق إطالة سلسلة الأوامر السابقة يمكن تنفيذ الكثير بعد تجريف البيانات.

على سبيل المثال يمكن فلترة المحتويات لنحصل فقط على الأخبار التي تحتوي على كلمة مُعينة، ثم إرسال إشعار بالبريد الإلكتروني أن هناك خبرًا جديدًا قد يهمك على موقع البي بي سي!

كما ترى، يُساعد جلب البيانات عبر تطبيق ما، ثم معالجتها إلى فتح الأبواب أمام احتمالات كبيرة وممتعة. من الجيّد حقًا صدور قرار يحمي حق الوصول البرمجي إلى المحتويات العلنية المنشورة على الإنترنت.


comments powered by Disqus