أدوات لالتقاط وتحويل الويب

تكرير البيانات كشط

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

جدول المثال: قائمة الكتب

فيما يلي بيانات الجدول التي يتم كشطها في هذا المثال ، هذا الجدول ، يتكون من أربعة أعمدة لقب, كاتب, كتاب العمر و الحالة.

لقب كاتب كتاب العمر الحالة
كيف لحديقة جون 5 تم النشر
كيفية استخدام الكاميرا سارة 0 غير كامل
كيفية استخدام الكاميرا سارة 0 غير كامل
علم الفلك سهل دومينيك 1 تحت المراجعة
كيفية الحديد بول 1 تحت المراجعة
كيف ترسم ميكروفون 3 تم النشر
كيفية استخدام الكمبيوتر راشيل 4 تم النشر
var titles = Page.getTagValues({"position":1,"tag":{"equals":"td"},"parent":{"tag":{"equals":"tr"}}});
var authors = Page.getTagValues({"position":2,"tag":{"equals":"td"},"parent":{"tag":{"equals":"tr"}}});
var ages = Page.getTagValues({"position":3,"tag":{"equals":"td"},"parent":{"tag":{"equals":"tr"}}});
var statuses = Page.getTagValues({"position":4,"tag":{"equals":"td"},"parent":{"tag":{"equals":"tr"}}});

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

Criteria.create();
statuses = Criteria.equals(statuses, "Published");
titles = Criteria.apply(titles);
authors = Criteria.apply(authors);
ages = Criteria.apply(ages);

عند استخدام Criteria طرق لتقليل البيانات يجب تطبيق جميع التغييرات على عمود واحد في وقت واحد ، قبل apply يتم استخدام الطريقة على أي أعمدة أخرى يجب أن تتم إزالة السجلات المقابلة لها. بمجرد الانتهاء من Criteria.create() يجب استدعاء الأسلوب قبل تعيين معايير لأعمدة أخرى. هذا هو السبب في أنه من أفضل الممارسات استدعاء Criteria.create() قبل أي أساليب معايير أخرى.

في المثال ، تم تقييد عمود الحالات ليشمل فقط تم النشر، ثم استخدام Criteria.apply الطريقة تم أيضًا إزالة السجلات المقابلة في الأعمدة الثلاثة الأخرى للحفاظ على اتساق جميع الأعمدة. تذكر أن طريقة التطبيق مفيدة فقط إذا كانت الأعمدة المختلفة تحتوي على نفس عدد السجلات.

يمكن أيضًا دمج Critieria معًا لتقييد البيانات بطرق متعددة. المثال التالي يقيد عمود عمر الكتاب إلى الكتب الأقدم من واحد ولكن أقل من خمس سنوات باستخدام Criteria.lessThan() و Criteria.greaterThan() الأساليب.

Criteria.create();
ages = Criteria.greaterThan(ages, 1);
ages = Criteria.lessThan(ages, 5);
titles = Criteria.apply(titles);
authors = Criteria.apply(authors);
statuses = Criteria.apply(statuses);

في بعض الأحيان هناك بيانات مكررة تحتاج إلى إزالتها ، لإزالة هذه المعلومات التي يمكنك استخدامها Criteria.unique الأسلوب.

Criteria.create();
titles = Criteria.unique(titles);
authors = Criteria.apply(authors);
ages = Criteria.apply(ages);
statuses = Criteria.apply(statuses);

الآن ستتم إزالة أي صفوف مكررة بناءً على عمود العنوان. الطريقة التالية هي Criteria.remove طريقة، أسلوب. يؤدي ذلك إلى إزالة العناصر من العمود إذا تم العثور على قيم الأعمدة هذه في معلمة الصفيف.

var authorsToRemove = ["Mike","Rachel"];
Criteria.create();
titles = Criteria.remove(authors, authorsToRemove);
authors = Criteria.apply(titles);
ages = Criteria.apply(ages);
statuses = Criteria.apply(statuses);

هنا تتم إزالة جميع السجلات التي تساوي مايك وراشيل في عمود المؤلفين طريقة التقديم ثم تزيل السجلات المقابلة من الأعمدة الأخرى.