أرشفة الموقع

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

تحويل مواقع بسيطة


لقد مضت أيام طويلة عندما تمت كتابة مواقع الويب يدويًا بتنسيق HTML. وهي الآن ديناميكية ومبنية بشكل سريع باستخدام أحدث أطر JavaScript أو PHP أو Python. ونتيجة لذلك ، أصبحت المواقع أكثر هشاشة: تعطل قاعدة البيانات أو تحديثات خاطئة أو نقاط ضعف يمكن أن تؤدي إلى فقدان البيانات. في حياتي السابقة كمطور ويب ، كان علي أن أتحمل الفكرة: يتوقع العملاء أن تعمل المواقع إلى الأبد. لا يتناسب هذا التوقع بشكل جيد مع مبدأ تطوير الويب "التحرك بسرعة وكسر الأشياء". أثبت العمل مع نظام إدارة محتوى دروبال أنه صعب بشكل خاص في هذا الصدد ، حيث تنتهك التحديثات الكبيرة عمداً التوافق مع وحدات الطرف الثالث ، مما يعني عملية تحديث باهظة الثمن نادرًا ما يستطيع العملاء تحملها. كان الحل هو أرشفة هذه المواقع: خذ موقعًا حيويًا وديناميكيًا - وحوله إلى ملفات HTML بسيطة يمكن لأي خادم ويب تقديمها إلى الأبد. هذه العملية مفيدة للمواقع الديناميكية الخاصة بك ، وكذلك لمواقع الطرف الثالث الخارجة عن سيطرتك والتي تريد حمايتها.

تتم معالجة المواقع البسيطة أو الثابتة بواسطة Wget الموقر. على الرغم من أنك تحتاج إلى تعويذة حقيقية لتعكس الموقع بالكامل:

$ nice wget --mirror --execute robots=off --no-verbose --convert-links \ --backup-converted --page-requisites --adjust-extension \ --base=./ --directory-prefix=./ --span-hosts \ --domains=www.example.com,example.com http://www.example.com/ 

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

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

ولكن هذا عندما يسير كل شيء على ما يرام. يعرف أي شخص عمل على الإطلاق مع جهاز كمبيوتر أن الأشياء نادرًا ما تسير وفقًا للخطة: هناك العديد من الطرق المثيرة للاهتمام لتعطيل الإجراء. على سبيل المثال ، منذ بعض الوقت كان من المألوف وضع الكتل مع التقويم على المواقع. ستنشئها CMS على الطاير وترسل برامج الزحف في دورة لا نهاية لها ، في محاولة للحصول على المزيد والمزيد من الصفحات الجديدة. يمكن --reject-regex المحفوظات الصعبة استخدام التعبيرات العادية (على سبيل المثال ، لدى Wget خيار --reject-regex ) لتجاهل الموارد --reject-regex للمشاكل. خيار آخر: إذا كانت واجهة إدارة الموقع متاحة ، قم بتعطيل التقاويم ونماذج تسجيل الدخول ونماذج التعليقات والمناطق الديناميكية الأخرى. بمجرد أن يصبح الموقع ثابتًا ، سيتوقف عن العمل على أي حال ، لذلك من المنطقي إزالة هذه الفوضى من الموقع الأصلي.

كابوس جافا سكريبت


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

تفشل طرق الأرشفة التقليدية في بعض الأحيان بطريقة غبية. عندما حاولت إجراء نسخ احتياطي لصحيفة محلية ، وجدت أن WordPress يضيف سلاسل استعلام (على سبيل المثال ?ver=1.12.4 ) في نهاية التضمين. هذا أمر مربك للكشف عن نوع المحتوى على خوادم الويب التي تقدم الأرشيف لأنها تعتمد على امتداد الملف لإنتاج رأس Content-Type الصحيح. عندما يتم تنزيل هذا الأرشيف إلى المتصفح ، لا يمكنه تحميل البرامج النصية ، مما يكسر مواقع الويب الديناميكية.

نظرًا لأن المتصفح يصبح تدريجياً آلة افتراضية لتشغيل تعليمات برمجية عشوائية ، يجب تكييف طرق الأرشفة القائمة على تحليل HTML خالص. يتمثل حل هذه المشكلات في تسجيل (وتشغيل) رؤوس HTTP التي يقدمها الخادم أثناء الزحف ، كما يستخدم أمناء المحفوظات المحترفون هذا الأسلوب.

إنشاء وعرض ملفات WARC


في أرشيف الإنترنت ، طور بروستر كاليه ومايك بيرنر تنسيق ARC (ARChive) في عام 1996: طريقة للجمع بين ملايين الملفات الصغيرة التي تم إنشاؤها أثناء الأرشفة. في النهاية ، تم توحيد التنسيق كمواصفة WARC (Web ARChive) ، تم إصداره كمعيار ISO في عام 2009 وتم تنقيحه في عام 2017. جهود التقييس التي يقودها الاتحاد الدولي للحفظ (IIPC). وفقًا لويكيبيديا ، إنها "منظمة دولية للمكتبات والمنظمات الأخرى تم إنشاؤها لتنسيق الجهود للحفاظ على محتوى الإنترنت للمستقبل" ، وتضم أعضاء مثل مكتبة الكونغرس وأرشيف الإنترنت. يستخدم هذا الأخير تنسيق WARC في زاحف Heritrix Java.

يجمع ملف WARC العديد من الموارد في أرشيف واحد مضغوط ، مثل رؤوس HTTP ومحتويات الملف والبيانات الوصفية الأخرى. بشكل ملائم ، يتم دعم هذا التنسيق أيضًا بواسطة زاحف Wget مع --warc . لسوء الحظ ، لا يمكن للمستعرضات عرض ملفات WARC مباشرة ، لذلك يلزم وجود عارض خاص للوصول إلى الأرشيف. أو عليك تحويله. أبسط عارض وجدته هو pywb ، وهي حزمة Python. يطلق خادم ويب بسيط بواجهة مثل آلة Wayback. لعرض محتويات ملفات WARC. ستقوم مجموعة الأوامر التالية بتعيين ملف WARC إلى http://localhost:8080/ :

  $ pip install pywb $ wb-manager init example $ wb-manager add example crawl.warc.gz $ wayback 

بالمناسبة ، أنشأ مطورو خدمة Webrecorder هذه الأداة ، والتي تحفظ المحتوى الديناميكي للصفحة باستخدام مستعرض.

لسوء الحظ ، لا يمكن لـ pywb تحميل ملفات WARC التي تم إنشاؤها بواسطة Wget لأنها تفي بالمتطلبات غير الصحيحة لمواصفات WARC 1.0 ، والتي تم إصلاحها في الإصدار 1.1 . حتى تقوم Wget أو pywb بإصلاح هذه المشاكل ، فإن ملفات WARC التي تم إنشاؤها بواسطة Wget ليست موثوقة بما فيه الكفاية ، لذلك بدأت شخصيًا في البحث عن بدائل أخرى. تم لفت انتباهي إلى الزاحف تحت اسم الزحف البسيط. إليك كيفية البدء:

  $ crawl https://example.com/ 

يدعم البرنامج بعض معلمات سطر الأوامر ، ولكن معظم القيم الافتراضية تعمل بشكل جيد: يقوم بتنزيل موارد مثل CSS والصور من المجالات الأخرى (إذا لم يتم تحديد العلامة -exclude-related ) ، ولكن لن يتجاوز العودية المضيف المحدد. بشكل افتراضي ، يتم بدء عشرة اتصالات متزامنة: يتم تغيير هذه المعلمة بعلامة -c . ولكن الأهم من ذلك ، يتم تحميل ملفات WARC الناتجة بشكل جيد في pywb.

العمل والبدائل المستقبلية


هناك العديد من الموارد لاستخدام ملفات WARC. على وجه الخصوص ، هناك Wget بديل يسمى Wpull ، مصمم خصيصًا لأرشفة مواقع الويب. لديها دعم تجريبي لـ PhantomJS والتكامل مع youtube-dl ، مما سيسمح لك بتنزيل مواقع JavaScript أكثر تعقيدًا وتنزيل وسائط الدفق ، على التوالي. يعد البرنامج أساسًا لأداة الأرشفة ArchiveBot ، التي يتم تطويرها بواسطة "فريق مجاني من المحفوظين والمبرمجين والكتاب والمتحدثين المؤذيين " من ArchiveTeam في محاولة "لحفظ القصة قبل أن تختفي إلى الأبد." يبدو أن تكامل PhantomJS ليس جيدًا كما نود ، لذلك يستخدم ArchiveTeam مجموعة من الأدوات الأخرى لتعكس المواقع الأكثر تعقيدًا. على سبيل المثال ، يقوم snscrape بمسح ملفات تعريف الوسائط الاجتماعية وإنشاء قوائم الصفحات لإرسالها إلى ArchiveBot. أداة أخرى هي crocoite ، والتي تشغل Chrome في وضع بلا عنوان لأرشفة المواقع التي تحتوي على الكثير من جافا سكريبت.

لن تكتمل هذه المقالة دون ذكر "مواقع Xerox" الخاصة بـ HTTrack . مثل Wget ، يقوم برنامج HTTrack بإنشاء نسخ محلية من المواقع ، ولكن للأسف ، لا يدعم الحفظ في WARC. قد تكون الميزات التفاعلية أكثر إثارة للاهتمام للمستخدمين المبتدئين غير المعتادين على سطر الأوامر.

على نفس المنوال ، خلال بحثي ، وجدت بديلاً لـ Wget يسمى Wget2 مع دعم العمل متعدد الخيوط ، مما يسرع البرنامج. ومع ذلك ، فإن بعض ميزات Wget مفقودة هنا ، بما في ذلك القوالب ، والحفظ في دعم WARC و FTP ، ولكن تمت إضافة دعم RSS ، وتخزين DNS المؤقت ، ودعم TLS المحسن.

أخيرًا ، سيكون حلمي الشخصي لهذه الأدوات هو دمجها مع نظام الإشارات المرجعية الحالي الخاص بي. أقوم حاليًا بتخزين ارتباطات مثيرة للاهتمام في Wallabag ، وهي خدمة تخزين محلية لصفحات مثيرة للاهتمام ، تم تطويرها كبديل لبرنامج Pocket المجاني (المملوك الآن من قبل Mozilla). لكن Wallabag في تصميمها يخلق فقط نسخة "قابلة للقراءة" من المقالة بدلاً من نسخة كاملة. في بعض الحالات ، تكون "النسخة القابلة للقراءة" غير قابلة للقراءة بالفعل ، ولا يستطيع Wallabag أحيانًا التعامل مع التحليل اللغوي . بدلاً من ذلك ، تقوم أدوات أخرى ، مثل الإشارات المرجعية أو إعادة التذكير ، بحفظ لقطة شاشة للصفحة جنبًا إلى جنب مع HTML كامل ، ولكن للأسف ، لا تدعم تنسيق WARC ، مما يوفر تشغيلًا أكثر دقة.

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

Source: https://habr.com/ru/post/ar431222/


All Articles