عمود

أدواتٌ تُسهِّل جمع البيانات من شبكة الإنترنت

برامج استخلاص البيانات المُصمَّمة حسب الطلب تدفع الأبحاث والمشروعات التعاونية إلى الأمام. 

نيكولاس جيه. ديفيتو، وجورجيا سي. ريتشاردز، وبيتر إنجلِسبي

  • Published online:

Credit: Shutterstock

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

وعلى سبيل المثال، في مشروعٍ يجري تنفيذه حاليًّا، نعمل على تحليل تقارير الأطباء الشرعيين؛ للمساعدة على منع بعض حالات الوفاة المستقبلية. وقد تطلَّب المشروع تنزيل أكثر من ثلاثة آلاف ملف بصيغة PDF، للبحث عن الوفيات المرتبطة بتعاطي المواد الأفيونية، وهي عملية جمع بيانات ضخمة. وفي أثناء مناقشةٍ مع الفريق البحثي الذي نعمل معه، قررنا أنَّ هذه المهمة مناسبةٌ للتنفيذ آليًّا. واستطعنا في غضون أيامٍ قليلة كتابة كود برنامج حاسوبي قادر على جمْع كل تلك الملفات بسرعةٍ وكفاءة، وعلى نحوٍ قابل للتكرار، ثم إنشاء جدول بيانات منها يُوثِّق كل حالات الوفاة هذه.

يُطلَق على هذا النوع من الأدوات اسم مستخلِصات البيانات من شبكة الإنترنت "web scraper"، وهي أدوات تستخدمها مجموعتنا البحثية بانتظام، لجمع المعلومات مثلًا من سجلات التجارب الإكلينيكية، ولإثراء قاعدة بياناتنا على موقع OpenPrescribing.net، التي تتابع وصف الأطباء للأدوية في مجال الرعاية الصحية الأولية بإنجلترا. ومثل هذه المهام إن نُفِّذَت دون مساعدةٍ من برنامجٍ حاسوبي بسيط نسبيًّا، فقد تغدو مزعجةً، بل قد تصل في صعوبتها إلى حد الاستحالة.

وفي حال مشروع تقارير الأطباء الشرعيين الذي نعمل عليه، استطعنا سابقًا أن نفحص ونحفظ 25 تقرير حالة فحسب يدويًّا كل ساعة. أما الآن، فيمكن لبرنامجنا أن يحفظ ما يزيد على ألف تقرير حالة في الساعة، بينما ننشغل بأداء مهام أخرى، وهو ما يوفر لنا وقتًا أكبر بمقدار أربعين مرة. ويتيح لنا البرنامج كذلك فرصًا للتعاون، لأنَّ في وسعنا مشاركة قاعدة البيانات الناتجة، وتحديثها عبر إعادة تشغيل البرنامج عند نشر ملفاتٍ جديدة بصيغة PDF.

كيف تعمل برامج استخلاص البيانات؟

مستخلصات البيانات هي برامج حاسوبية، تَستخرِج المعلومات من مواقع شبكة الإنترنت؛ إذ تُرمَّز بِنْية صفحات مواقع الإنترنت ومحتواها بلغة ترميز النص الفائق (HTML)، التي يمكنك أن تراها عند استخدام خاصّيتي "عرض المصدر" view source، أو "فحص العنصر" inspect element في متصفح الإنترنت لديك. ويفهم برنامج استخلاص البيانات هذه اللغة، ويستطيع تحليلها واستخلاص المعلومات منها، فعلى سبيل المثال، يمكن تكويد البرنامج بحيث يستطيع أن يستخلص حقول بيانات محددة من جدول بيانات منشور على شبكة الإنترنت، أو أن ينزِّل وثائق من روابط منشورة على صفحة موقعٍ ما.

ومن مهام استخلاص البيانات الاعتيادية: زيارة كل رابطٍ محتمل. وعلى سبيل المثال، بدءًا من www.example. com/data/1، حتى www.example.com/data/100 (وهي مهمة يُطلق عليها أحيانًا "الزحف" على الروابط) لتخزين ما تحتاجه من بياناتٍ من كل صفحة، دون المخاطرة بوقوع خطأٍ بشري في أثناء استخلاص المعلومات. وبمجرد أن تنتهي من كتابة كود البرنامج، يمكنك إعادة جمع هذه البيانات متى احتجت إلى ذلك، طالما ظلت بِنْية الموقع الإلكتروني كما هي في أغلبها.

كيف أبدأ في استخدام مستخلِصات البيانات؟

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

أما بديل ذلك، فهو تصميم برنامج استخلاص بيانات خاص بك، وهذه عمليةٌ أصعب، لكنّها تتيح لك تحكمًا أكبر بكثير. ويستخدم فريقنا لغة البرمجة "بايثون" Python، لكنّ أي لغة برمجة حديثة يُتوقع أن تفي بالغرض (فيما يخص الحِزَم البرمجية، فإن حزمتَي "ريكويستس" Requests، و"بيوتيفول سوب" Beautiful Soup تعملان معًا بكفاءة، إذا كنتَ تستخدم لغة "بايثون". أما إذا كنتَ تستخدم لغة "آر" R، فيمكنك تجربة حزمة "آرفيست" rvest). ومن المفيد أيضًا أن تتأكد ممَّا إذا كان هناك مَن كتب كودًا لبرنامج استخلاص بيانات يناسب المصدر الذي يهمك. وفي حال عدم وجود برنامجٍ كهذا، يوجد الكثير من المصادر والدورات التعليمية المجانية لمساعدتك على البدء، أيًّا كانت اللغة البرمجية المفضلة لك.

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

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

نقاط تجب مراعاتها

هل يمكنك الحصول على البيانات بطريقةٍ أسهل؟ بالنسبة إلى مشروع "متابعة امتثال التجارب لقانون تحسين إدارة الغذاء والدواء" FDAAA Trials Tracker project، الذي نعمل به، ستكون مهمة استخلاص البيانات مما يزيد على 300 ألف تقريرٍ يوميًّا من موقع سجل التجارب الإكلينيكية https://clinicaltrials.gov ضخمة. ومن حسن الحظ.. يتيح الموقع تنزيل قاعدة بياناته كلها، وكل ما يفعله برنامجنا هو تنزيل هذا الملف مرةً يوميًّا، بيد أننا لم نكن محظوظين بالدرجة نفسها فيما يتعلق بالبيانات التي يحتاجها مشروعنا الآخر، مشروع "متابعة نتائج تجارب الاتحاد الأوروبي الإكلينيكية"  EU TrialsTracker. ولذا، نستخلص البيانات من سجل الاتحاد الأوروبي شهريًّا.

وفي حال عدم وجود إمكانيةٍ لتنزيل دفعة من البيانات مرةً واحدة، تأكد مما إذا كان الموقع الإلكتروني لديه واجهة برمجة تطبيقات (API)، أم لا؛ فهذه الواجهة تتيح لبرامج استخلاص البيانات التفاعل مع بيانات الموقع مباشرةً، بدلًا من الحاجة إلى الاطلاع على لغة ترميز النص الفائق فيه. وقد يكون ذلك أقل مشقةً بكثير من استخلاص البيانات من كل صفحةٍ من الموقع على حدة، لكن قد توجد رسومٌ نظير الوصول إلى واجهة برمجة التطبيقات (تأمل، على سبيل المثال، واجهة برمجة التطبيقات في موقع "جوجل ماب"Google’s Map). وفي مشروعنا، كثيرًا ما نستفيد من تلك الواجهة في أرشيف "بَبْ مِدْ" PubMed. ويمكنك عوضًا عن ذلك التحقُّق مما إذا كان مشغلو الموقع في وسعهم توفير البيانات لك مباشرةً، أم لا.

هل يمكن استخلاص البيانات من كل المواقع؟ بعض المواقع لا يتيح بياناته مباشرةً عبر لغة ترميز النص الفائق، وقد يتطلب تقنيات أكثر تطورًا لاستخلاص البيانات منه (انظر المصادر، مثل "ستاك أوفرفلو" New StackOverflow؛ للحصول على المساعدة، إذا كانت لديك استفسارات معينة). كما يستخدم بعض المواقع الأخرى إجراءات لحمايته، مثل "رموز التحقق من الهوية البشرية" captchas، أو التدابير المضادة لهجمات حَجْب الخدمة (DoS)، وهذه ـتُصعِّب مهمة استخلاص البيانات. كذلك ستجد أنَّ عددًا قليلًا من المواقع يرفض أن تُستخلَص بياناته. ومن ثم، صُمِّم لإعاقة ذلك. ومن الشائع أيضًا أن يسمح لك الموقع باستخلاص بياناته، شريطة اتباع قواعد معينة، تكون مُرمَّزة عادةً في ملفٍ من نوع robots.txt.

هل تراعي الكِياسة في أثناء استخلاص البيانات؟ في كل مرةٍ يطلب برنامجك بياناتٍ من موقعٍ إلكتروني، تحتاج إلى أن يوفر خادم الموقع المعلومات الأساسية وراءها لك. وفي حين أنه لا يمكنك التحرك في الموقع سوى بسرعةٍ محدودة عند استخدام متصفح ويب، فإنَّ برنامج استخلاص البيانات قد يُرسِل إلى الموقع ما يتراوح بين مئات وآلاف طلبات البيانات في الدقيقة. وإمطار خادم الإنترنت الخاص بالموقع بطلبات البيانات على هذا النحو قد يبطئ الموقع، أو يتسبب في تعطيله كليًّا (كأنَّك قد شننتَ على الموقع بغير قصد هجومًا لحَجْب الخدمة). وقد يؤدي هذا إلى حَجْب وصولك إلى الموقع بصفة مؤقتة، أو دائمة. ومن ثم، عليك أن تحرص على تقليل احتمالات إيقاع الضرر بالموقع إلى أدنى حد. فعلى سبيل المثال، يمكنك إيقاف برنامجك لبضعة ثوانٍ خلال كل طلب (راجع ملف robots.txt الخاص بالموقع، لمعرفة ما إذا كان يحدد فترة توقف معينة مطلوبة، أم لا).

هل ثمة قيود مفروضة على البيانات؟ تأكَّد مما إذا كانت هناك قيودٌ تتعلق بتراخيص استخدام البيانات المستخلَصة وحقوق نشرها، أم لا. فبينما قد يُسمح لك باستخدام البيانات التي استخلصتَها، من المفيد كذلك أن تتأكد من أنه يجوز لك مشاركتها من الناحية القانونية. ويُفترض أن تكون رخصة المحتوى الخاصة بالموقع متاحةً للوصول إليها بسهولة. وسواءٌ أكان بوسعك مشاركة البيانات، أم لا، ينبغي عليك مشاركة كود البرنامج الخاص بك باستخدام خدماتٍ معينة، مثل "جِت هَب" GitHub، فهذه من الممارسات النافعة في إتاحة الوصول المفتوح إلى العلوم، وتَضْمَن لغيرك القدرة على اكتشاف برنامجك، وتكرار استخدامه وتطويره.

ونؤمن إيمانًا راسخًا بأنَّه على المزيد من الباحثين أن يطوروا أكوادًا برمجية تساعدهم على تنفيذ أبحاثهم، ثم مشاركة هذه البرامج مع المجتمع. وإذا كان جمْع البيانات يدويًّا إحدى المشكلات التي تواجهك في مشروعك، فإنَّ برامج استخلاص البيانات من المواقع الإلكترونية قد تكون الحل الأمثل لك، وقد تصبح فرصةً لتنفيذ مشروع برمجة مفيد للمبتدئين. وتتسم تلك البرامج بأنها معقدة بما فيه الكفاية لتُعلِّمك دروسًا مهمة عن تطوير البرامج الحاسوبية، لكنَّها كذلك شائعة ومُوثَّقة جيدًا إلى درجةٍ تجعل المبتدئين يشعرون بالثقة وهم يجربون استخدامها. وكتابة كود برنامج بسيط نسبيًّا باستخدام حاسوبك، ثم جعْله يتفاعل مع عالم الإنترنت الخارجي، قد يجعلك تشعر وكأنَّك تتمتع بقوةٍ بحثية خارقة. فماذا تنتظر إذَن؟!

نيكولاس جيه. ديفيتو، وجورجيا سي. ريتشاردز

باحثان مرشحان للحصول على درجة الدكتوراة.

 

بيتر إنجلِسبي

مهندس برمجيات يعمل في مختبر بيانات الطب المسند بالدليل EBM DataLab بجامعة أكسفورد في المملكة المتحدة.