إستخراج البيانات من صفحات الإنترنت بلغة البايثون - لمحة سريعة

إستخراج البيانات من صفحات الإنترنت بلغة البايثون – لمحة سريعة

إستخراج البيانات من صفحات الإنترنت من المواضيع الهامة حيث يستمر عدد مستخدمي شبكة الانترنت في التزايد عامًا بعد عام في ظل الانتشار الواسع لشبكة الإنترنت. يتزامن ذلك مع التقدم الهائل في التقنيات والعلوم، ويصاحب هذا التزايد تضخم كبير في المعلومات والبيانات، حيث تقول شركة CISCO (أشهر الشركات التي تقدم أجهزة البنية التحتية للشبكات) إن حجم مرور البيانات في الانترنت سيتجاوز واحد زيتا بايت خلال عام 2017 (1 زيتا بايت = ألف مليار جيجا بايت).

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

في هذه التدوينة نُقدم لكم:

  • لمحة سريعة عن مفهوم إستخراج البيانات من صفحات الإنترنت.
  • شرح مُبسط لمكتبتين في البايثون.
  • مثال صغير لجلب روابط من صفحة باستخدام البايثون.

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

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

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

صفحات الانترنت عبارة عن مستندات HTML مما يعني أن عناصر ومكونات الصفحة تكون ذات هيكلية وترتيب معين. العديد من المواقع لا يُمكن الحصول على البيانات الموجودة فيها، ولا تقدم هذه المواقع آلية لحفظ البيانات بالصيغ المشهورة كـ csv أو json مثلًا، لذلك من المهم أن يكون لدينا القدرة على حل هذه المشكلة.

لماذا إستخراج البيانات من صفحات الإنترنت ؟

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

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

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

كل مُحتوى يمكن عرضه في صفحة من الممكن تجريفه

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

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

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

مكتبة Requests

هذه المكتبة من المكتبات المشهورة في بايثون وهي خاصة ببروتوكول HTTP وتدعم كل العمليات الخاصة به مثل عمليات POST, GET واستقبال ومعالجة الرد، وهي سهلة الاستخدام ويُمكننا القول إن  قوة هذه المكتبة يكمن في سهولتها.

أغلب عمليات تجريف الانترنت لا تستغني عن هذه المكتبة المهمة، ودورها الأساسي في التجريف هو الحصول على مكونات الصفحة الأساسية (الصفحة ك html).

لتثبيت المكتبة نستخدم أداة pip لذلك ونُنفذ الأمر التالي في الطرفية:

pip install requests

المثال التالي يوضح كيفية قراءة الصفحة الرئيسية لمدونة بايثونات:

import requests

page = requests.get('https://pythonat.com')

contents = page.content

في البداية نستورد مكتبة requests ومن ثم نستخدم الدالة get لإرسال request والحصول على الرد الناتج من طلب العنوان الذي مررناه للدالة. النتيجة سيتم حفظها في المتغير page والذي هو عبارة عن كائن من نوع Response يتضمن معلومات الرد.

المرجع التالي يشرح لك أساسيات هذه المكتبة وكيفية التعامل معها.

http://docs.python-requests.org/en/master/user/quickstart/

مكتبة BeautifulSoup

هي مكتبة مُهمتها تفسير/تحليل/قراءة ملفات html و xml. فبدلاً من بناء شيفرة برمجية تعمل على تفسير ومعالجة هذه الملفات، من الممكن استخدام هذه المكتبة لقراءة عناصر ملف html والبحث فيها والحصول على قيم هذه العناصر وبذلك يتم توفير وقت وجهد كبيرين.

لو أردنا مثلًا الحصول على جميع الروابط الموجودة في الصفحة الرئيسية لمدونة بايثونات، نستطيع تحقيق ذلك باستخدام مكتبة Requests ومكتبة Beautiful Soup  معًا.

لتثبيت مكتبة Beautiful Soup نستخدم مرة أخرى الأداة pip:

pip install beautifulsoup4

المثال التالي يوضح كيفية الحصول على جميع الروابط الموجودة في الصفحة الرئيسية لمدونة بايثونات:

from bs4 import BeautifulSoup

import requests

req = requests.get("https://pythonat.com")

bs = BeautifulSoup(req.text,"html.parser")

for link in bs.findAll('a'):

    print(link.get("href"))

في البداية نستورد مكتبتي requests و beautfulsoup ومن ثم نُرسل طلب لرابط المدونة الرئيسي ونحفظ الرد في المتغير req.

الى الان نمتلك html الخاص بالصفحة الرئيسية للمدونة فقط ونحتاج الان لاستخراج الروابط منه. نُعرف متغير باسم bs من نوع BeautifulSoup والذي يُمثل المُفسر (Parser) ومن ثم نستخدم الدالة findAll للحصول على جميع العناصر من نوع رابط في الصفحة ومن ثم نطبع كل قيمة للسمة href.

عند تشغيل الشيفرة السابقة ستحصل على قائمة عديدة من الروابط منها:

….

https://pythonat.com/tag/machine-learning/

https://pythonat.com/tag/pandas/

https://pythonat.com/feed/

https://pythonat.com/comments/feed/

….

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

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

هل ذلك يكفي لإستخراج البيانات من صفحات الإنترنت ؟

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

أغلب المواقع تستخدم الجافا سكريبت و CSS لعرض وإدارة المحتوى في صفحات الانترنت بطريقة متقدمة وبتعقيدات كثيرة. في مثل هذه الحالات يوجد في البايثون مكتبات مثل Selenium و Scrapy والتي تُعتبران من المكتبات المُتقدمة في مجال إستخراج البيانات من صفحات الإنترنت.

 

 

 

 

 

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *