في هذا الدرس، سننشئ أداة لاستخراج البيانات من أي موقع ويب باستخدام Selenium. Selenium هو مشروع مفتوح المصدر يستخدم لأتمتة المتصفحات. وهو يوفر مجموعة واسعة من الأدوات والمكتبات للأتمتة. يمكننا كتابة نصوص برمجية لأتمتة المتصفح بلغات مختلفة، مثل Java وPython وC# وKotlin وما إلى ذلك.
تنفيذ Web Scraper لجلب البيانات
في مثالنا، سنوضح عملية استخراج بيانات الويب باستخدام لغة بايثون من خلال الحصول على قائمة الأفلام الأكثر شهرة من موقع IMDB.
الخطوة 1. استيراد الوحدات النمطية
للبدء في استخدام أداة Web Scrapper الخاصة بنا، نقوم باستيراد Selenium والوحدات النمطية ذات الصلة
1 2 | from selenium import webdriver from selenium.webdriver.common.keys import Keys |
الخطوة 2. تهيئة WebDriver
من أجل أتمتة المتصفح، نحتاج إلى تنزيل WebDriver الخاص بمتصفح الويب الذي نعتزم استخدامه. في حالتنا، أستخدم Google Chrome، لذا قمت بتنزيل Chrome WebDriver.
تأكد من أن إصدار Chrome وإصدار WebDriver متطابقان. نحتاج إلى تمرير المسار الخاص بـ WebDriver كما هو موضح أدناه، في طريقة Chrome:
1 | driver = webdriver.Chrome('C://software/chromedriver.exe') |
الخطوة 3. الوصول إلى موقع الويب عبر بايثون
لكي نتمكن من الوصول إلى بيانات موقع الويب، نحتاج إلى فتح عنوان URL الخاص بالموقع الذي سنقوم باستخراجه.
للقيام بذلك، نستخدم التابع get ونمرر عنوان URL للموقع الإلكتروني كمعلمة للتابع. في حالتنا، هو صفحة الويب الخاصة بـ IMDB للأفلام الأكثر شهرة.
1 | driver.get("https://www.imdb.com/chart/moviemeter/?ref_=nv_mv_mpm") |
عندما نقوم بتشغيل هذا الكود فإنه سوف يفتح متصفح الويب في نظام الكمبيوتر باستخدام موقع الويب الذي تم إرساله (URL).
الخطوة 4. ابحث عن المعلومات المحددة التي تريد حذفها
في حالتنا، نبحث عن أسماء الأفلام الأعلى تقييمًا من IMDB، لذلك سنجد XPath الخاص بعنصر HTML.
يمكن فهم XPath على أنه موقع المسار إلى حدث معين (كائن) في مستند HTML، والذي يستخدم للعثور على عنصر/عناصر أو تحديد موقعها على صفحة ويب.
للحصول على XPath لعنصر ما، انتقل إلى أداة Inspect في المتصفح، ثم حدد تلك الأداة المعينة (التي نحتاج إلى الحصول على مسارها) باستخدام أداة التحديد وانقر بزر الماوس الأيمن على كود HTML، ثم حدد Copy XPath.
في مثالنا، بعد فحص عناصر اسم الأفلام يبدو أن كل اسم موجود في الفئة – titleColumn، لذلك يمكننا تمرير هذا كـ xpath في الكود الخاص بنا والوصول إلى أسماء الأفلام.
1 2 3 | < td class = "titleColumn" > < a href = "" title = "Chloé Zhao (dir.), Gemma Chan, Richard Madden" >Eternals</ a > </ td > |
سنستخدم طريقة find_elements_by_xpath()
للعثور على كل فئة titleColumn.
1 | movies = driver.find_elements_by_xpath('//td[@class="titleColumn"]') |
ملاحظة: كل xpath يسبقه خط مائل مزدوج. — ‘//td[@class=“titleColumn”]
’
الخطوة 5. تخزين البيانات في قائمة بايثون
الآن بعد أن تمكنا بنجاح من جلب المعلومات المطلوبة، نحتاج إلى تخزينها في متغير أو بنية بيانات لاسترجاعها ومعالجتها في الجزء الأخير من الكود. يمكننا تخزين البيانات المستخرجة في هياكل بيانات مختلفة مثل المصفوفة والقائمة والقاموس.
هنا، نقوم بتخزين البيانات التي جمعناها (أسماء الأفلام الأعلى تقييمًا) في قائمة. وللقيام بذلك، يمكننا كتابة حلقة تتكرر عبر كل اسم فيلم وتخزينه في قائمة.
movies_list هي قائمة فارغة تحتوي على كافة المعلومات التي تم جلبها من موقع الويب.
1 2 3 | movies_list = [] for p in range(len(movies)): movies_list.append(movies[p].text) |
كود بايثون النهائي لاستخراج بيانات موقع الويب هو:
1 2 3 4 5 6 7 8 9 10 | from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome('C://software/chromedriver.exe') driver.get('https://www.imdb.com/chart/moviemeter/?ref_=nv_mv_mpm') movies = driver.find_elements_by_xpath('//td[@class="titleColumn"]') movies_list = [] for p in range(len(movies)): movies_list.append(movies[p].text) |
إذا قمنا بطباعة قائمة movies_list في سطر واحد، فإن:
1 | print(*movies_list, sep = "\n") |
نحصل على الناتج مثل:
هذه هي الطريقة التي يمكنك بها استخراج بيانات موقع الويب من أي موقع ويب تقريبًا باستخدام Selenium وPython. طالما أنك تجد XPath الصحيح ويمكنك تحديد النمط الذي يستخدمه موقع الويب، يصبح من السهل حقًا الوصول إلى جميع البيانات على أي موقع ويب.
ليست هناك تعليقات:
إرسال تعليق