2010-03-27 23 views
5

मैं किसी वेबसाइट को स्क्रैप करने और कुछ डेटा एकत्र करने के लिए PHP का उपयोग कर रहा हूं। यह सब regex का उपयोग किए बिना किया जाता है। मैं इसके बजाय विशेष HTML टैग खोजने के लिए php की विस्फोट() विधि का उपयोग कर रहा हूं।कैसे पता चलेगा कि वेबसाइट स्क्रैप हो गई है या नहीं?

यह संभव है कि वेबसाइट परिवर्तन (सीएसएस, एचटीएमएल) की संरचना है, तो गलत डेटा स्क्रेपर द्वारा एकत्र किया जा सकता है। तो सवाल यह है कि - मुझे कैसे पता चलेगा कि HTML संरचना बदल गई है या नहीं? गलत डेटा संग्रहीत होने से बचने के लिए मेरे डेटाबेस में किसी भी डेटा को संग्रहीत करने से पहले इसे कैसे पहचानें।

उत्तर

7

मुझे लगता है कि आप किसी भी स्वच्छ समाधान नहीं है, तो आप एक पृष्ठ scraping रहे हैं, जहां सामग्री में परिवर्तन।

मैं कई अजगर स्क्रेपर्स का विकास किया है और मुझे पता है कि निराशा हो सकती है, जब साइट सिर्फ अपने लेआउट पर एक सूक्ष्म परिवर्तन करता है।

आप एक समाधान एक ला मशीनीकरण (php समकक्ष पता नहीं है) की कोशिश कर सकते हैं और आप सामग्री को निकालने के लिए आप की जरूरत को अलग सकता है अगर तुम भाग्यशाली हो (लिंक?)।

एक और संभव दृष्टिकोण कुछ कमी कोड और उन्हें जाँच से पहले दुकान db से होगा।

उदाहरण के लिए, यदि आप Urls scraping रहे हैं, आप की पुष्टि है कि क्या स्क्रेपर पार्स है औपचारिक रूप से एक मान्य URL है की आवश्यकता होगी; पूर्णांक आईडी के लिए या जो भी आप स्क्रैप करना चाहते हैं उसके लिए मान्य के रूप में पहचाना जा सकता है।

यदि आप सादे पाठ को स्क्रैप कर रहे हैं, तो जांचना अधिक कठिन होगा।

+0

अरे वह मैं था। क्षमा करें क्योंकि यह जानबूझकर नहीं था !! मैंने गलत बटन दबाया और अब मैं इसे बदलने में सक्षम नहीं हूं। यह कहता है - "जब तक यह उत्तर संपादित नहीं किया जाता है, तब तक बहुत पुराना वोट बदलना चाहिए"। क्षमा करें, कृपया उत्तर में कुछ बदलाव करें ताकि मैं इसे वोट दे सकूं। यह जानबूझकर नहीं था। – Yeti

1

पहले, कुछ मामलों में आप नए एचटीएमएल करने के लिए मूल की hashes तुलना कर सकते हैं। एमडी 5 और एसएचए 1 दो लोकप्रिय हैंश हैं। यह सभी परिस्थितियों में मान्य हो सकता है या नहीं भी हो सकता है लेकिन ऐसा कुछ है जिसे आपको परिचित होना चाहिए। यह आपको बताएगा कि कुछ बदल गया है - सामग्री, टैग, या कुछ भी।

को समझने के लिए अगर संरचना बदल गया है आप और टैग घटनाओं की एक हिस्टोग्राम पर कब्जा करने की आवश्यकता होगी तो उन की तुलना करें। यदि आप टैग के आदेश से बाहर होने की परवाह करते हैं तो आपको टैग के पेड़ को कैप्चर करना होगा और यह देखने के लिए तुलना करना होगा कि टैग एक ही क्रम में होते हैं या नहीं। यह आप जो हासिल करना चाहते हैं उसके लिए बहुत विशिष्ट होने जा रहा है।

PHP Simple HTML DOM Parser जो आप HTML पार्स करने में मदद करेगा एक उपकरण है।

+2

@BrainLy: सिर्फ इसलिए कि नई HTML फ़ाइल में एक अलग हैश है, इसका मतलब यह नहीं है कि HTML संरचना बदल गई है। – codaddict

+0

हैश * हमेशा * भिन्न होंगे क्योंकि डेटा जो मैं स्क्रैप कर रहा हूं वह एक घंटे के आधार पर बदलता है! मेरा मतलब था, क्या होगा यदि उन्होंने साइट के डिज़ाइन को बदल दिया, तो यह एक कुशल तरीके से कैसे पता लगाया जा सकता है? – Yeti

+0

गतिशील पृष्ठ लगातार विभिन्न संरचनाओं में बिना विभिन्न संरचनात्मक परिवर्तनों के उत्पादन करेंगे। –

0

Explode() एक HTML पार्सर नहीं है, लेकिन यदि आप HTML संरचना में परिवर्तन के बारे में जानना चाहते हैं। यह मुश्किल हो जा रहा है। एक HTML पार्सर का उपयोग करने का प्रयास करें। कुछ भी ठीक से ऐसा करने में सक्षम नहीं होगा।

+0

कोई भी अपनी downvote व्याख्या करने की देखभाल? – spender

2

आप संरचना के संबंध में परिवर्तन जानना चाहते हैं, मुझे लगता है कि सबसे अच्छा तरीका है अपने प्रथम पृष्ठ के डोम संरचना की दुकान और फिर नया एक के साथ तुलना करना है।

वहाँ जिस तरह से आप यह कर सकते हैं की बहुत हैं: - SaxParser DOmParser आदि

मैं एक छोटे से ब्लॉग जो मैं क्या मतलब http://let-them-c.blogspot.com/2009/04/xml-as-objects-in-oops.html

या आप http://en.wikipedia.org/wiki/Simple_API_for_XML उपयोग कर सकते हैं करने के लिए कुछ संकेत दिए गए देगा या डीओएम उपयोगिता पार्सर।

+1

HTML के साथ XML पार्सर्स का उपयोग करने का प्रयास करते समय आपको बहुत सावधान रहना होगा। वे थोड़ी सी विकृत HTML पर उड़ते हैं। –

2

यहाँ मेरे गधे से बाहर बात हो रही है, लेकिन इसकी संभव है कि आप कुछ दस्तावेज़ ऑब्जेक्ट मॉडल पीएचपी तरीकों को देखने के लिए चाहते हो सकता है।

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

अगर मेरे डोम की बहुत, बहुत सीमित समझ सही है, HTML साइट संरचना में बदलाव के दस्तावेज़ ऑब्जेक्ट मॉडल बदल जाएगा, लेकिन एक निश्चित ढांचे के भीतर एक सरल सामग्री परिवर्तन नहीं होगा। इसलिए, यदि आप डीओएम राज्य को पकड़ सकते हैं, और फिर प्रत्येक स्क्रैप पर इसकी तुलना कर सकते हैं, तो क्या आप सिद्धांत में यह निर्धारित नहीं कर सकते कि ऐसा परिवर्तन किया गया है?

(वैसे, जिस तरह से मैंने यह ईमेल किया था जब मैं एक विशेष पृष्ठ पर बार परीक्षा परिणाम पोस्ट किए जाने पर ईमेल अधिसूचना प्राप्त करने का प्रयास कर रहा था, बस file_get_contents() मानों की तुलना करें। आश्चर्यजनक रूप से, बिना किसी काम के सकारात्मक , और जैसे ही साइट ने सामग्री पोस्ट की, मुझे ईमेल किया।)

2

साइट पर निर्भर करता है लेकिन आप स्क्रैप किए गए पृष्ठ जैसे div, class & स्टाइल टैग में पेज तत्वों की संख्या की गणना कर सकते हैं, फिर इन योगों की तुलना इन आंकड़ों की तुलना करके कर सकते हैं बाद में स्क्रैप का पता लगाता है कि पृष्ठ संरचना बदल दी गई है या नहीं।

सीएसएस फ़ाइल के लिए एक समान प्रक्रिया का उपयोग किया जा सकता है, जहां प्रत्येक वर्ग या आईडी के नामों को सरल रेगेक्स का उपयोग करके निकाला जा सकता है, संग्रहीत और आवश्यकतानुसार चेक किया जा सकता है। यदि इस सूची में नए परिवर्धन हैं तो पृष्ठ संरचना लगभग निश्चित रूप से साइट पर कहीं भी बदली गई है।

संबंधित मुद्दे