
عالية السرعة/منخفضة التكلفة CommonCrawl RegExp في Node.js
تم بناء WARCannon لتبسيط وتقليل تكلفة عملية 'البحث في الإنترنت'.
مع WARCannon، يمكنك:
يستفيد WARCannon من الاستخدام الذكي لتقنيات AWS للتوسع أفقيًا إلى أي سعة، وتقليل التكلفة من خلال أساطيل الفوري (spot fleets) ونقل البيانات في نفس المنطقة، وسحب البيانات من S3 بسرعات لا تصدق (تصل إلى 100 جيجابت في الثانية لكل عقدة)، والتوازي عبر مئات نوى وحدة المعالجة المركزية، وإبلاغ الحالة عبر DynamoDB وCloudFront، وتخزين النتائج عبر S3.
بشكل عام، يمكن لـ WARCannon معالجة أنماط متعددة من التعبيرات العادية عبر 400 تيرابايت في بضع ساعات بتكلفة حوالي 30 دولارًا.
أسرع وأسهل طريقة للبدء هي استخدام AWS CloudShell. فقط الصق هذا السطر الواحد:
source <(curl https://raw.githubusercontent.com/c6fc/warcannon/master/cloudshell/deploy.sh)
إذا كنت تريد استخدام فرع غير master من WARCannon، فقط اكتب:
export GIT_BRANCH=branch_name
source <(curl https://raw.githubusercontent.com/c6fc/warcannon/$GIT_BRANCH/cloudshell/deploy.sh)
ملاحظة: يستخدم نشر CloudShell تخزينًا مؤقتًا، مما يعني فقدان أنماط regex المخصصة عند خروج CloudShell. إذا كنت ستستخدم WARCannon بشكل متكرر، أوصي باستخدام 'التثبيت المحلي' أدناه.
يتطلب WARCannon تثبيت ما يلي:
نصيحة احترافية: للحفاظ على الأشياء نظيفة ومميزة عن غيرها مما قد يكون لديك في AWS، يُوصى بشدة بنشر WARCannon في حساب جديد. يمكنك إنشاء حساب جديد بسهولة من وحدة تحكم 'Organizations' في AWS. بتعبير 'موصى به بشدة'، أعني 'لا تقم بتثبيت هذا بجانب أشياء أخرى بجدية'.
أولاً، استنسخ المستودع وانسخ الإعدادات المثال.
$ git clone [email protected]:c6fc/warcannon.git
$ cd warcannon
warcannon$ cp settings.json.sample settings.json
قم بتعديل settings.json حسب رغبتك:
الإعدادات المطلوبة
nodeInstanceType: مصفوفة من أنواع المثيلات لاستخدامها في المعالجة المتوازية. أنواع 'c' هي الأفضل قيمة لهذا الغرض، ويمكن استخدام أي حجم. القيمة الموصى بها للحملات الحقيقية هي ["c5n.18xlarge"].nodeCapacity: عدد العقد المطلوب طلبها أثناء المعالجة المتوازية. ستكون العقد الناتجة توزيعًا عشوائيًا لأنواع nodeInstanceTypes التي تحددها.nodeParallelism: عدد ملفات WARC المتزامنة للمعالجة لكل vCPU. الرقم 2 هو رقم جيد هنا. إذا كانت العقد لا تحتوي على ذاكرة وصول عشوائي كافية للتشغيل عند هذا المستوى من التوازي (كما قد تواجهه مع مثيلات من نوع 'c')، فستعمل بدلاً من ذلك بأعلى مستوى أمان من التوازي.nodeMaxDuration: أقصى عمر افتراضي لعقد الحوسبة بالثواني. سيتم إنهاء العقد تلقائيًا بعد هذا الوقت إذا لم تكتمل المهمة بعد. القيمة الافتراضية هي 24 ساعة.الإعدادات الاختيارية (اتركها بالكامل إذا لم تكن مستخدمة)
sshKeyName: اسم مفتاح SSH الخاص بـ EC2 موجود بالفعل في us-east-1.allowSSHFrom: قناع CIDR للسماح باتصال SSH منه. سيكون هذا عادةً <yourpublicip>/32للتثبيت، قم بتشغيل هذا:
$ npm install
$ npm link
$ warcannon deploy
تشغيل حملة في WARCannon يستخدم سير عمل بسيط وسهل المتابعة يمكن وصفه بشكل أفضل في هذه الخطوات القليلة:
warcannon deploywarcannon testLocal -swarcannon testwarcannon list 2022warcannon populate 2022-21warcannon firewarcannon syncResultsتابع القراءة لفهم أكثر تفصيلاً لكل خطوة.
يغذي WARCannon بواسطة Common Crawl عبر برنامج AWS Open Data. يتميز Common Crawl بأن البيانات التي يسترجعها عناكبها لا تلتقط نص موقع الويب فحسب، بل تلتقط أيضًا محتوى نصيًا آخر مثل JavaScript وTypeScript وHTML الكامل وCSS وما إلى ذلك. من خلال إنشاء تعبيرات عادية مناسبة قادرة على تحديد المكونات الفريدة، يمكن للباحثين تحديد مواقع الويب بناءً على التقنيات التي تستخدمها، دون لمس الموقع نفسه أبدًا. المشكلة هي أن هذا يتطلب تحليل مئات التيرابايت من البيانات، وهي مهمة صعبة بغض النظر عن الموارد المتاحة لك. لحسن الحظ، يوفر WARCannon عدة أدوات يمكنك استخدامها لإنجاز ذلك!
البحث في الإنترنت ليس لضعاف القلوب، لكن البدء بمنخل فعال هو الخطوة الأولى. يدعم WARCannon ذلك من خلال تمكين التحقق المحلي من التعبيرات العادية ضد بيانات Common Crawl الحقيقية. أولاً، افتح lambda_functions/warcannon/matches.js وقم بتعديل كائن regex_patterns ليشمل التعبيرات العادية التي ترغب في استخدامها بتنسيق name: pattern. إليك مثال من مجموعة البحث الافتراضية:
exports.regex_patterns = {
"access_key_id": /(\'A|"A)(SIA|KIA|IDA|ROA)[JI][A-Z0-9]{14}[AQ][\'"]/g,
};
سيتم حفظ السلاسل المطابقة لهذا التعبير تحت المفتاح المقابل في النتائج؛ access_key_id في هذه الحالة. نصيحة احترافية: استخدم RegExr بتنسيق 'JavaScript' لبناء واختبار التعبيرات العادية ضد المطابقات المعروفة الجيدة.
لديك أيضًا خيار التقاط النتائج فقط من نطاقات محددة. للقيام بذلك، ما عليك سوى ملء مصفوفة domains بأسماء النطاقات المؤهلة بالكامل (FQDNs) التي ترغب في تضمينها. يُوصى بتركها فارغة [] لأنها لا تستحق العناء تقريبًا أبدًا (الجهد المحفوظ في المعالجة صغير جدًا)، ولكن يمكن أن تكون مفيدة في بعض الحالات المحددة.
exports.domains = ["example1.com", "example2.com"];
بمجرد ملء matches.js، قم بتشغيل الأمر التالي:
warcannon$ warcannon testLocal -s
يمكنك اختياريًا إضافة مسار إلى ملف WARC في دلو S3 commoncrawl إذا أردت، ولكن سيتم استخدام مسار افتراضي ثابت بخلاف ذلك.
سيقوم WARCannon بمعالجة ملف WARC بتدفق (أو تنزيله بالكامل إذا حذفت -s) للعثور على المطابقات التي قمت بتكوينها. سيحفظ WARCannon النتائج في مجلد ~/.warcannon/ عند المقاطعة بـ ctrl+c أو عند انتهاء المعالجة. هذا يسهل اختبار المطابقات الشائعة بسرعة كبيرة مع الحد الأدنى من عرض النطاق الترددي.
علاوة على كل شيء آخر، سيحاول WARCannon تقييم التكلفة الحسابية الإجمالية لتعبيراتك العادية عند تشغيلها محليًا. بهذه الطريقة، يمكنك أن تكون على علم ما إذا كان تعبير عادي معين سيؤثر بشكل كبير على الأداء قبل تنفيذ حملتك.

أحيانًا لا يكون نمط regex البسيط كافيًا بمفرده، وتحتاج إلى بعض الخطوات الإضافية لضمان إرجاع المعلومات الصحيحة. في هذه الحالة، مجرد إضافة دالة إلى كائن exports.custom_functions بنفس اسم المفتاح يسمح لك بإجراء أي معالجة إضافية تراها مناسبة.
exports.regex_patterns = {
"access_key_id": /(\'A|"A)(SIA|KIA|IDA|ROA)[JI][A-Z0-9]{14}[AQ][\'"]/g,
};
exports.custom_functions = {
"access_key_id": function(match) {
// تجاهل المطابقات التي تحتوي على 'EXAMPLE' في النص، لأن هذا شائع في التوثيق.
if (match.text(/EXAMPLE/) != null) {
// إرجاع قيمة منطقية 'false' يتجاهل المطابقة.
return false
}
}
}
ملاحظة: WARCANNON مصمم لمعالجة النصوص بسرعات مذهلة. بينما من الممكن بالتأكيد إجراء أي نوع من العمليات التي ترغب فيها، فإن إضافة وظائف مخصصة عالية زمن الوصول مثل استدعاءات الشبكة يمكن أن تزيد بشكل كبير من وقت المعالجة والتكاليف. قد تؤدي استدعاءات الشبكة أيضًا إلى الكثير من الاستدعاءات لموقع ويب، مما قد يجعلك في مشكلة. كن ذكيًا في كيفية استخدام هذه الوظائف.
يمكن أن تكون تكاليف AWS مصدر قلق، خاصة عندما تبحث فقط عن إجراء بعض الأبحاث. تم بناء WARCannon للسماح بالتنفيذات الفردية بالإضافة إلى الحملات الكاملة، حتى تكون واثقًا من النتائج التي ستحصل عليها. بمجرد أن تصبح راضيًا عن النتائج التي تحصل عليها باستخدام testLocal، يمكنك نشر المطابقات المحدثة وإجراء اختبار مدعوم من السحابة بسهولة:
warcannon$ warcannon deploy
warcannon$ warcannon test
مرة أخرى، يمكنك اختياريًا تضمين مسار WARC إذا أردت، على الرغم من أنه ليس مطلوبًا.