هل تبحث عن برامج استخراج بيانات المواقع الإلكترونية باستخدام بايثون؟ في هذه المقالة، سنقدم لك بعض المكتبات المفيدة لاستخراج بيانات المواقع الإلكترونية باستخدام بايثون. ستجد الأدوات والإلهام لبدء مشروع استخراج بيانات المواقع الإلكترونية.
استخراج البيانات من الويب هو عملية استخراج المعلومات من الكود المصدر لصفحة الويب. قد يكون هذا نصًا أو بيانات رقمية أو حتى صورًا. إنها الخطوة الأولى للعديد من المشاريع المثيرة للاهتمام! ومع ذلك، لا توجد تقنية أو منهجية ثابتة لاستخراج البيانات من الويب باستخدام بايثون. أفضل نهج يعتمد بشكل كبير على حالة الاستخدام.
هذه المقالة موجهة للأشخاص الذين لديهم خبرة أكبر قليلاً في بايثون وتحليل البيانات. إذا كنت جديدًا على بايثون وتحتاج إلى بعض المواد التعليمية، فقم بإلقاء نظرة على هذا المسار لتزويدك بخلفية في تحليل البيانات.
Requests
الخطوة الأولى في هذه العملية هي الحصول على البيانات من صفحة الويب التي نريد استخراجها. تُستخدم مكتبة requests لإرسال طلبات HTTP إلى عنوان URL.
على سبيل المثال، لنفترض أننا مهتمون بالحصول على مقال من مدونة pyarabic.com. لاستيراد المكتبة والحصول على الصفحة، لا يتطلب الأمر سوى بضعة أسطر من التعليمات البرمجية:
>>> import requests
>>> url = 'https://pyarabic.com/python-vs-php/'
>>> r = requests.get(url)
الكائن r هو الاستجابة من الخادم المضيف ويحتوي على نتائج طلب ()get. لمعرفة ما إذا كان الطلب ناجحًا، تحقق من الحالة باستخدام r.status_code. نأمل ألا نرى الخطأ 404 المزعج! تحتاج أيضًا إلى أن تكون على دراية بإمكانية حدوث خطأ 403 المزعج بنفس القدر في كشط الويب، ولكن لحسن الحظ هذا شيء لديك سيطرة أكبر عليه، لأنه يرتبط عادةً بأنظمة مكافحة الكشط، وليس مشكلة الصفحة المفقودة لأخطاء 404. من الممكن تخصيص طلب ()get ببعض الوسائط الاختيارية لتعديل الاستجابة من الخادم. لمزيد من المعلومات حول هذه المكتبة، بما في ذلك كيفية إرسال طلب مخصص، ألق نظرة على الوثائق ودليل المستخدم.
للحصول على محتويات صفحة الويب، نحتاج فقط إلى القيام بما يلي:
>>> page_text = r.text
يؤدي هذا إلى إرجاع محتويات الصفحة بأكملها كسلسلة. ومن هنا، قد نحاول استخراج المعلومات المطلوبة يدويًا، ولكن هذا أمر فوضوي ومعرض للخطأ. ولحسن الحظ، هناك طريقة أسهل.
Beautiful Soup
Beautiful Soup هي مكتبة سهلة الاستخدام مع وظيفة تحليل مستندات HTML وXML تلقائيًا إلى بنية شجرية. تقوم هذه المكتبة بتحليل البيانات فقط، ولهذا السبب نحتاج إلى مكتبة أخرى للحصول على البيانات كما رأينا في القسم السابق.
توفر المكتبة أيضًا دوال للتنقل والبحث وتعديل البيانات المحللة. إن تجربة استراتيجيات تحليل مختلفة أمر سهل للغاية، ولا داعي للقلق بشأن ترميزات المستندات.
يمكننا استخدام هذه المكتبة لتحليل السلسلة بتنسيق HTML من البيانات التي استردناها واستخراج المعلومات التي نريدها. لنقم باستيراد المكتبة والبدء في إعداد بعض الوصفات:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(page_text, 'html.parser')
لدينا الآن كائن BeautifulSoup
، والذي يمثل السلسلة كهيكل بيانات متداخل. تعتمد كيفية المتابعة من هنا على المعلومات التي نريد استخراجها من الصفحة. قد يكون ذلك النص أو مقتطفات التعليمات البرمجية أو العناوين أو أي شيء آخر.
للحصول على فكرة عن كيفية تمثيل المعلومات، افتح عنوان URL في متصفحك وألق نظرة على الكود المصدر خلف صفحة الويب. يبدو الأمر على هذا النحو:
لنفترض أننا نريد استخراج مقتطفات كود بايثون من كود مصدر HTML. لاحظ أنها تظهر دائمًا بين <pre class="brush: python; title: ; notranslate">
و </pre>
يمكننا استخدام هذا لاستخراج كود بايثون من الوصفة على النحو التالي:
>>> string = soup.find(class_ = "brush: python; title: ; notranslate").text
هنا، نستخدم التابع find()
، الذي يستخرج فقط المطابقة الأولى. إذا كنت تريد العثور على جميع التطابقات، فاستخدم find_all()
لإرجاع بنية بيانات تشبه القائمة والتي يمكن فهرستها بشكل طبيعي.
الآن، لدينا مقتطف التعليمات البرمجية كسلسلة تتضمن أحرف سطر جديد ومسافات لتباعد التعليمات البرمجية. لتشغيل هذا الكود، يتعين علينا تنظيفه قليلاً لإزالة الأحرف غير المرغوب فيها وحفظه في ملف .py. على سبيل المثال، يمكننا استخدام string.replace('>', '')
لإزالة الأحرف >
.
اطلع على هذه المقالة، التي تحتوي على مثال قد يكون مفيدًا في هذه المرحلة. إن كتابة برنامج لتنزيل وتشغيل برامج أخرى له طابع تكراري لطيف. ومع ذلك، كن حذرًا من تنزيل أي كود ضار محتمل.
Selenium
تم تطوير Selenium في الأساس كإطار عمل لأتمتة المتصفحات واختبارها. ومع ذلك، وجدت المكتبة استخدامًا آخر كمجموعة أدوات استخراج بيانات الويب باستخدام بايثون، مما يجعلها متعددة الاستخدامات. على سبيل المثال، فهي مفيدة إذا احتجنا إلى التفاعل مع موقع ويب عن طريق ملء نموذج أو النقر فوق زر. يمكن أيضًا استخدام Selenium لكشط المعلومات من JavaScript التي تستخدمها العديد من المواقع لتحميل المحتوى ديناميكيًا.
لنستخدم Selenium لفتح متصفح، والانتقال إلى صفحة ويب، وإدخال نص في حقل، واسترداد بعض المعلومات. ومع ذلك، قبل أن نفعل كل ذلك، نحتاج إلى تنزيل ملف تنفيذي إضافي لتشغيل المتصفح. في هذا المثال، سنعمل مع متصفح Chrome، ولكن هناك خيارات أخرى. يمكنك العثور على برامج التشغيل لإصدار Chrome الخاص بك هنا. قم بتنزيل برنامج التشغيل الصحيح وحفظه في الدليل.
لفتح المتصفح باستخدام Selenium في بايثون، قم بما يلي:
>>> from selenium import webdriver
>>> driver = webdriver.Chrome(directory+'chromedriver.exe')
>>> driver.get('https://pyarabic.com/')
>>> driver.maximize_window()
يؤدي هذا إلى فتح نافذة متصفح، والانتقال إلى https://pyarabic.com وتكبير النافذة. والخطوة التالية هي العثور على زر “دروس بايثون” والنقر عليه:
>>> courses_button = driver.find_element_by_link_text('python-tutorials')
>>> courses_button.click()
>>> driver.refresh()
ينتقل المتصفح إلى صفحة دروس بايثون. دعنا نجد مربع البحث وندخل مصطلح البحث:
>>> search_field = driver.find_element_by_class_name('TextFilterComponent__search-bar')
>>> search_field.clear()
>>> search_field.send_keys('excel')
يتم تحديث النتائج تلقائيًا. بعد ذلك، نريد العثور على النتيجة الأولى وطباعة اسم الدرس:
>>> result = driver.find_element_by_class_name('tutorialsBlock')
>>> innerhtml = result.get_attribute('innerHTML')
>>> more_soup = BeautifulSoup(innerhtml, 'html.parser')
>>> title = more_soup.find(class_ = 'tutorialsBlock__name').text
نستخدم BeautifulSoup لتحليل HTML من نتيجة البحث الأولى ثم إرجاع اسم الدرس كسلسلة نصية. إذا أردنا تشغيل هذا الكود في كتلة واحدة، فقد يكون من الضروري ترك البرنامج في وضع السكون لبضع ثوانٍ للسماح بتحميل الصفحة بشكل صحيح. جرّب سير العمل هذا باستخدام مصطلح بحث مختلف، على سبيل المثال، “سلاسل نصية” أو “علم البيانات”.
للقيام بكل هذا لمشروعك الخاص، تحتاج إلى فحص الكود المصدر لصفحة الويب للعثور على الأسماء أو المعرفات ذات الصلة للعناصر التي تريد التفاعل معها. يعتمد هذا دائمًا على حالة الاستخدام وينطوي على القليل من العمل الاستقصائي.
Scrapy
على عكس المكتبتين السابقتين، فإن Scrapy سريع وفعال للغاية. وهذا يجعله مفيدًا في استخراج كميات كبيرة من البيانات من الويب – وهي ميزة كبيرة لهذه المكتبة. كما أنها تتولى أيضًا استخراج البيانات وتحليلها.
ومع ذلك، فهي ليست المكتبة الأسهل استخدامًا على الإطلاق. فمن الصعب أن تستوعبها. ومن الصعب أيضًا أن نعرض مثالاً بسيطًا هنا.
تتضمن سير العمل لاستخدام scrapy إنشاء مشروع مخصص في دليل منفصل، حيث يتم إنشاء العديد من الملفات والدلائل تلقائيًا.
أحد الدلائل التي تم إنشاؤها هو دليل “spiders/
” الذي تضع فيه spiders. Spiders هي فئات ترث من فئة scrapy.Spider
. وهي تحدد الطلبات التي يجب تقديمها، وكيفية متابعة أي روابط على صفحة الويب، وكيفية تحليل المحتوى. بمجرد تحديد spider لزحف صفحة الويب واستخراج المحتوى، يمكنك تشغيل البرنامج النصي الخاص بك من الطرفية. راجع هذه المقالة لمعرفة المزيد حول استخدام Python وواجهة سطر الأوامر.
من بين الميزات القوية الأخرى ل scrapy تسجيل الدخول التلقائي. بالنسبة لبعض المواقع، لا يمكننا الوصول إلى البيانات إلا بعد تسجيل الدخول بنجاح، ولكن يمكننا أتمتة ذلك باستخدام scrapy.FormRequest
.
اقرأ صفحة وثائق Scrapy للحصول على مزيد من المعلومات. ستجد هناك دليل التثبيت ومثالاً على استخدام هذه المكتبة.
من أين نبدأ في استخراج بيانات؟
لقد شاهدنا أساسيات استخراج البيانات من الويب باستخدام بايثون وناقشنا بعض المكتبات الشائعة. إن استخراج البيانات من الويب له عدد كبير من التطبيقات. قد ترغب في استخراج نص من ويكيبيديا لاستخدامه في معالجة اللغة الطبيعية. قد ترغب في الحصول على توقعات الطقس لمدينتك تلقائيًا. قد تكتب أيضًا برنامجًا لمقارنة أسعار الرحلات الجوية أو الفنادق قبل إجازتك القادمة.
هناك العديد من المزايا لاستخدام بايثون في مشاريع علوم البيانات. من الجيد عمومًا أن تبدأ بمشروع صغير ثم تكتسب مهاراتك تدريجيًا. إذا كنت تطور مشاريع أكثر تعقيدًا باستخدام مكتبات متعددة، فتابعها باستخدام ملف requirements.txt. قبل أن تدرك ذلك، ستكون قد أتقنت مهارة أخرى في رحلتك مع بايثون!
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.