كيف تعرف ما إذا كان الموقع الذي تم تجاهله قد تغير؟

StackOverflow https://stackoverflow.com/questions/2530285

سؤال

أنا أستخدم PHP لكشط موقع ويب وجمع بعض البيانات. كل شيء يتم دون استخدام regex. أنا أستخدم طريقة Explode () PHP للعثور على علامات HTML معينة بدلاً من ذلك.

من الممكن أنه إذا تغير هيكل الموقع (CSS ، HTML) ، فقد يتم جمع البيانات الخاطئة بواسطة المكشطة. لذا فإن السؤال هو - كيف أعرف ما إذا كان بنية HTML قد تغير؟ كيفية تحديد هذا قبل تخزين أي بيانات إلى قاعدة البيانات الخاصة بي لتجنب تخزين البيانات الخاطئة.

هل كانت مفيدة؟

المحلول

أعتقد أنه ليس لديك أي حلول نظيفة إذا كنت تقوم بتخليص صفحة حيث يتغير المحتوى.

لقد طورت العديد من كاشطات Python وأعرف كيف يمكن أن يكون محبطًا عندما يقوم الموقع بإجراء تغيير دقيق في تصميمه.

يمكنك تجربة حل لآلية LA (لا تعرف نظير PHP) وإذا كنت محظوظًا ، فيمكنك عزل المحتوى الذي تحتاجه لاستخراج (روابط؟).

هناك نهج إمكاني آخر هو ترميز بعض القيود والتحقق منها قبل المتجر إلى DB.

على سبيل المثال ، إذا كنت تقوم بتجشير عناوين URL ، فستحتاج إلى التحقق من أن ما تم تحليله لمكشطة هو عنوان URL صالحًا ؛ نفس الشيء بالنسبة لمعرف عدد صحيح أو أي شيء تريد كشط يمكن التعرف عليه على أنه صالح.

إذا كنت تجسد نصًا عاديًا ، فسيكون من الصعب التحقق.

نصائح أخرى

إذا كنت ترغب في معرفة التغييرات فيما يتعلق بالهيكل ، أعتقد أن أفضل طريقة هي تخزين بنية DOM في صفحتك الأولى ثم قارنها مع جديدة.

هناك الكثير من الطريقة التي يمكنك من خلالها القيام بذلك:- Saxparser Domparser وما إلى ذلك

لدي مدونة صغيرة ستمنح بعض المؤشرات لما أعنيهhttp://let-them-c.blogspot.com/2009/04/xml-as-objects-in-ooops.html

أو يمكنك استخدام http://en.wikipedia.org/wiki/simple_api_for_xml أو DOM فائدة المحلل.

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

http://php.net/manual/en/book.dom.php

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

(بالمناسبة ، كانت الطريقة التي فعلت بها هذا عندما كنت أحاول الحصول على إشعار بريد إلكتروني عندما تم نشر نتائج امتحان الشريط على صفحة معينة فقط مقارنة قيم file_get_contents. بمجرد نشر الموقع المحتوى.)

يعتمد على الموقع ولكن يمكنك حساب عدد عناصر الصفحات في الصفحة المشبك مثل علامات Div و Class & Style ثم بمقارنة هذه الإجماليات مع اكتشاف الخدوش اللاحقة إذا تم تغيير بنية الصفحة.

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

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

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

PHP Simple HTML DOM Parser هي أداة تساعدك على تحليل HTML.

Explode() ليس محلل HTML ، لكنك تريد معرفة التغييرات في بنية HTML. سيكون هذا صعبًا. حاول استخدام محلل HTML. لن يتمكن أي شيء آخر من القيام بذلك بشكل صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top