नोट: चूंकि इस उत्तर का पूर्ण संस्करण स्टैक ओवरफ्लो की लंबाई सीमा से अधिक है, इसलिए आपको अधिक सुझावों और विवरणों के साथ विस्तारित संस्करण को पढ़ने के लिए GitHub की ओर जाना होगा।
स्क्रैपिंग में बाधा डालने के लिए (जिसे वेब्सक्रैपिंग , स्क्रीनक्रैपिंग , वेब डेटा माइनिंग , वेब हार्वेस्टिंग या वेब डेटा निष्कर्षण के रूप में भी जाना जाता है ), यह जानने में मदद करता है कि ये स्क्रैपर्स कैसे काम करते हैं, और, विस्तार से, जो उन्हें अच्छी तरह से काम करने से रोकता है।
वहाँ विभिन्न प्रकार के खुरचनी है, और प्रत्येक अलग तरीके से काम करता है:
मकड़ियों, जैसे कि Google के बॉट या वेबसाइट कॉपियर्स जैसे HTtrack , जो डेटा प्राप्त करने के लिए अन्य पृष्ठों के लिंक का पुन: अनुसरण करता है। इन्हें कभी-कभी विशिष्ट डेटा प्राप्त करने के लिए लक्षित स्क्रैपिंग के लिए उपयोग किया जाता है, अक्सर प्रत्येक पृष्ठ से वांछित डेटा निकालने के लिए HTML पार्सर के साथ संयोजन में।
शैल स्क्रिप्ट: कभी-कभी, सामान्य यूनिक्स टूल का उपयोग स्क्रैपिंग के लिए किया जाता है: पृष्ठों को डाउनलोड करने के लिए Wget या कर्ल, और डेटा निकालने के लिए Grep (Regex)।
HTML पार्सर, जैसे कि Jsoup, Scrapy और अन्य के आधार पर । शेल-स्क्रिप्ट रेगेक्स आधारित लोगों के समान, ये HTML में पैटर्न के आधार पर पृष्ठों से डेटा निकालने के द्वारा काम करते हैं, आमतौर पर बाकी सभी चीजों को अनदेखा करते हैं।
उदाहरण के लिए: यदि आपकी वेबसाइट में एक खोज सुविधा है, तो ऐसा स्क्रैपर खोज के लिए अनुरोध सबमिट कर सकता है, और फिर परिणाम पृष्ठ HTML से सभी परिणाम लिंक और उनके शीर्षक प्राप्त कर सकते हैं, विशेष रूप से केवल खोज परिणाम लिंक और उनके शीर्षक प्राप्त करने के लिए। । ये सबसे आम हैं।
स्क्रीनशॉट, उदाहरण के आधार पर। सेलेनियम या फैंटमजेएस , जो आपकी वेबसाइट को एक वास्तविक ब्राउज़र में खोलते हैं, जावास्क्रिप्ट, AJAX और इसी तरह चलाते हैं, और फिर वेबपेज से आम तौर पर वांछित पाठ प्राप्त करते हैं:
आपके पेज लोड होने के बाद ब्राउज़र से HTML प्राप्त करना और जावास्क्रिप्ट चलाना, और फिर वांछित डेटा निकालने के लिए HTML पार्सर का उपयोग करना है। ये सबसे आम हैं, और इसलिए HTML पार्सर / स्क्रेपर्स को तोड़ने के कई तरीके यहां भी काम करते हैं।
प्रस्तुत पृष्ठों का स्क्रीनशॉट लेना, और फिर स्क्रीनशॉट से वांछित पाठ निकालने के लिए ओसीआर का उपयोग करना। ये दुर्लभ हैं, और केवल समर्पित स्क्रैपर्स हैं जो वास्तव में चाहते हैं कि आपका डेटा इसे सेट करेगा।
Webscraping सेवाएं जैसे कि ScrapingHub या Kimono । वास्तव में, ऐसे लोग हैं जिनका काम यह पता लगाना है कि आपकी साइट को कैसे खंगालना है और दूसरों के उपयोग के लिए सामग्री को बाहर निकालना है।
अप्रत्याशित रूप से, पेशेवर स्क्रैपिंग सेवाएं रोकना सबसे कठिन हैं, लेकिन यदि आप अपनी साइट को परिमार्जन करने के तरीके का पता लगाने के लिए इसे कठिन और समय लेने योग्य बनाते हैं, तो ये (और जो लोग ऐसा करने के लिए भुगतान करते हैं) आपकी वेबसाइट को खंगालने के लिए परेशान नहीं हो सकते हैं।
अपनी वेबसाइट को फ़्रेम के साथ अन्य साइट के पृष्ठों में एम्बेड करना, और मोबाइल एप्लिकेशन में अपनी साइट को एम्बेड करना।
जबकि तकनीकी रूप से स्क्रैपिंग नहीं है, मोबाइल एप्लिकेशन (एंड्रॉइड और आईओएस) वेबसाइटों को एम्बेड कर सकते हैं, और कस्टम सीएसएस और जावास्क्रिप्ट को इंजेक्ट कर सकते हैं, इस प्रकार आपके पृष्ठों की उपस्थिति को पूरी तरह से बदल सकते हैं।
मानव प्रति - पेस्ट: लोग इसे कहीं और उपयोग करने के लिए आपकी सामग्री को कॉपी और पेस्ट करेंगे।
इन विभिन्न प्रकार के स्क्रैपर के बीच बहुत ओवरलैप होता है, और कई स्क्रैपर्स समान व्यवहार करेंगे, भले ही वे विभिन्न तकनीकों और विधियों का उपयोग करें।
इन युक्तियों में ज्यादातर मेरे अपने विचार हैं, विभिन्न कठिनाइयाँ जो मुझे स्क्रेपर्स लिखते समय हुई हैं, साथ ही साथ सूचनाओं और विचारों के बारे में भी है।
स्क्रैपिंग को कैसे रोकें
आप इसे पूरी तरह से रोक नहीं सकते हैं , जो कुछ भी आप करते हैं, निर्धारित स्क्रैपर्स अभी भी पता लगा सकते हैं कि कैसे परिमार्जन करना है। हालाँकि, आप कुछ चीज़ें करके बहुत अधिक स्क्रैपिंग को रोक सकते हैं:
अपने लॉग और ट्रैफ़िक पैटर्न की निगरानी करें; यदि आप असामान्य गतिविधि देखते हैं तो सीमा तक पहुंच:
नियमित रूप से अपने लॉग की जांच करें, और स्वचालित एक्सेस (स्क्रैपर्स) के असामान्य गतिविधि संकेतक के मामले में, जैसे कि एक ही आईपी पते से कई समान क्रियाएं, आप एक्सेस को ब्लॉक या सीमित कर सकते हैं।
विशेष रूप से, कुछ विचार:
दर सीमित:
केवल उपयोगकर्ताओं (और स्क्रैपर्स) को एक निश्चित समय में सीमित संख्या में कार्य करने की अनुमति देता है - उदाहरण के लिए, केवल किसी विशिष्ट आईपी पते या उपयोगकर्ता से प्रति सेकंड कुछ खोजों की अनुमति दें। यह स्क्रेपर्स को धीमा कर देगा, और उन्हें अप्रभावी बना देगा। यदि कोई क्रिया वास्तविक उपयोगकर्ता की तुलना में बहुत तेज़ी से या तेज़ी से पूर्ण होती है, तो आप एक कैप्चा भी दिखा सकते हैं।
असामान्य गतिविधि का पता लगाएं:
यदि आप असामान्य गतिविधि देखते हैं, जैसे कि विशिष्ट आईपी पते से कई समान अनुरोध, कोई व्यक्ति अत्यधिक संख्या में पृष्ठों को देख रहा है या असामान्य संख्या में खोज कर रहा है, तो आप पहुंच को रोक सकते हैं, या बाद के अनुरोधों के लिए कैप्चा दिखा सकते हैं।
आईपी पते द्वारा सिर्फ मॉनिटर और रेट लिमिट न करें - अन्य संकेतकों का भी उपयोग करें:
यदि आप ब्लॉक या दर सीमा करते हैं, तो इसे प्रति-आईपी पते के आधार पर न करें; विशिष्ट उपयोगकर्ताओं या स्क्रैपर्स की पहचान करने के लिए आप अन्य संकेतकों और विधियों का उपयोग कर सकते हैं। कुछ संकेतक जो आपको विशिष्ट उपयोगकर्ताओं / स्क्रैपर्स की पहचान करने में मदद कर सकते हैं, उनमें शामिल हैं:
उपयोगकर्ता कितनी तेज़ी से फ़ॉर्म भरते हैं, और एक बटन पर वे कहाँ क्लिक करते हैं;
आप जावास्क्रिप्ट के साथ बहुत सारी जानकारी एकत्र कर सकते हैं, जैसे कि स्क्रीन आकार / रिज़ॉल्यूशन, टाइमज़ोन, स्थापित फोंट, आदि; आप उपयोगकर्ताओं की पहचान करने के लिए इसका उपयोग कर सकते हैं।
HTTP हेडर और उनका क्रम, विशेष रूप से उपयोगकर्ता-एजेंट।
एक उदाहरण के रूप में, यदि आपको एक ही आईपी पते से कई अनुरोध मिलते हैं, तो सभी एक ही उपयोगकर्ता एजेंट, स्क्रीन आकार (जावास्क्रिप्ट के साथ निर्धारित) का उपयोग करते हैं, और उपयोगकर्ता (इस मामले में स्क्रैपर) हमेशा एक ही तरह से बटन पर क्लिक करता है और नियमित अंतराल, यह शायद एक स्क्रीन खुरचनी है; और आप अस्थायी रूप से समान अनुरोधों को ब्लॉक कर सकते हैं (उदाहरण के लिए उस उपयोगकर्ता एजेंट और उस विशेष आईपी पते से आने वाले स्क्रीन आकार के साथ सभी अनुरोधों को ब्लॉक कर सकते हैं), और इस तरह से आप उस आईपी पते पर वास्तविक उपयोगकर्ताओं को असुविधा नहीं करेंगे, जैसे। साझा इंटरनेट कनेक्शन के मामले में।
आप इसे आगे भी ले सकते हैं, जैसा कि आप समान अनुरोधों की पहचान कर सकते हैं, भले ही वे अलग-अलग आईपी पते से आते हों, वितरित स्क्रैपिंग का संकेत (बॉटनेट या प्रॉक्सी के नेटवर्क का उपयोग कर एक स्क्रैपर)। यदि आपको बहुत से समान अनुरोध मिलते हैं, लेकिन वे अलग-अलग आईपी पते से आते हैं, तो आप ब्लॉक कर सकते हैं। फिर, अनजाने में वास्तविक उपयोगकर्ताओं को अवरुद्ध नहीं करने के बारे में जागरूक रहें।
यह स्क्रीनसेवर के खिलाफ प्रभावी हो सकता है जो जावास्क्रिप्ट चलाते हैं, क्योंकि आप उनसे बहुत सारी जानकारी प्राप्त कर सकते हैं।
सुरक्षा स्टैक एक्सचेंज पर संबंधित प्रश्न:
अस्थायी रूप से अवरुद्ध पहुंच के बजाय, कैप्चा का उपयोग करें:
दर-सीमा को लागू करने का सरल तरीका एक निश्चित समय के लिए अस्थायी रूप से पहुंच को अवरुद्ध करना होगा, हालांकि एक कैप्चा का उपयोग करना बेहतर हो सकता है, कैप्चा पर अनुभाग को और नीचे देखें।
पंजीकरण और लॉगिन की आवश्यकता है
यदि आपकी साइट के लिए यह संभव है, तो अपनी सामग्री को देखने के लिए खाता निर्माण की आवश्यकता है। यह स्क्रेपर्स के लिए एक अच्छा निवारक है, लेकिन वास्तविक उपयोगकर्ताओं के लिए भी एक अच्छा निवारक है।
- यदि आपको खाता बनाने और लॉगिन करने की आवश्यकता है, तो आप उपयोगकर्ता और कार्यों को सही तरीके से ट्रैक कर सकते हैं। इस तरह, आप आसानी से पता लगा सकते हैं कि स्क्रैपिंग के लिए एक विशिष्ट खाते का उपयोग कब किया जा रहा है, और इसे प्रतिबंधित करें। दरों को सीमित करने या दुरुपयोग का पता लगाने (जैसे थोड़े समय में बड़ी संख्या में खोजें) जैसी चीजें आसान हो जाती हैं, क्योंकि आप केवल आईपी पते के बजाय विशिष्ट स्क्रैपर्स की पहचान कर सकते हैं।
कई खाते बनाने वाली लिपियों से बचने के लिए, आपको निम्न करना चाहिए:
पंजीकरण के लिए एक ईमेल पते की आवश्यकता होती है, और खाता सक्रिय करने के लिए एक लिंक भेजकर उस ईमेल पते को सत्यापित करना चाहिए। प्रति ईमेल पते पर केवल एक ही खाते की अनुमति दें।
पंजीकरण / खाता निर्माण के दौरान कैप्चा को हल करना होगा।
सामग्री देखने के लिए खाता निर्माण की आवश्यकता उपयोगकर्ताओं और खोज इंजनों को दूर ले जाएगी; यदि आपको किसी लेख को देखने के लिए खाते के निर्माण की आवश्यकता है, तो उपयोगकर्ता कहीं और जाएंगे।
क्लाउड होस्टिंग और स्क्रैपिंग सेवा आईपी पते से ब्लॉक का उपयोग
कभी-कभी, स्क्रैपर्स को वेब होस्टिंग सेवाओं, जैसे अमेज़ॅन वेब सर्विसेज या जीएई, या वीपीएस से चलाया जाएगा। ऐसी क्लाउड होस्टिंग सेवाओं द्वारा उपयोग किए जाने वाले आईपी पतों से उत्पन्न अनुरोधों के लिए आपकी वेबसाइट तक पहुंच सीमित करें (या एक कैप्चा दिखाएं)।
इसी तरह, आप प्रॉक्सी या वीपीएन प्रदाताओं द्वारा उपयोग किए जाने वाले आईपी पते से भी पहुंच को सीमित कर सकते हैं, क्योंकि कई अनुरोधों का पता लगाने से बचने के लिए स्क्रैपर्स ऐसे प्रॉक्सी सर्वर का उपयोग कर सकते हैं।
खबरदार कि प्रॉक्सी सर्वर और वीपीएन तक पहुंच को अवरुद्ध करके, आप वास्तविक उपयोगकर्ताओं को नकारात्मक रूप से प्रभावित करेंगे।
यदि आप ब्लॉक करते हैं तो अपनी त्रुटि संदेश नॉन्डस्क्रिप्ट बनाएं
यदि आप ब्लॉक / लिमिट एक्सेस का उपयोग करते हैं, तो आपको यह सुनिश्चित करना चाहिए कि आप स्क्रैपर को ब्लॉक होने का कारण न बताएं, जिससे उन्हें यह पता चल सके कि उनके स्क्रैपर को कैसे ठीक किया जाए। तो एक बुरा विचार पाठ के साथ त्रुटि पृष्ठ दिखाना होगा:
आपके IP पते से बहुत सारे अनुरोध, कृपया बाद में पुनः प्रयास करें।
त्रुटि, उपयोगकर्ता एजेंट हेडर मौजूद नहीं है!
इसके बजाय, एक फ्रेंडली एरर मैसेज दिखाएं, जो स्क्रैपर को इसका कारण नहीं बताता है। ऐसा कुछ बेहतर है:
- क्षमा करें, कुछ गलत हो गया। आप के माध्यम से समर्थन से संपर्क कर सकते हैं
helpdesk@example.com
, समस्या बनी रहना चाहिए।
यह वास्तविक उपयोगकर्ताओं के लिए बहुत अधिक उपयोगकर्ता के अनुकूल है, क्या उन्हें कभी इस तरह के त्रुटि पृष्ठ को देखना चाहिए। आपको एक हार्ड ब्लॉक के बजाय बाद के अनुरोधों के लिए कैप्चा दिखाने पर भी विचार करना चाहिए, यदि कोई वास्तविक उपयोगकर्ता त्रुटि संदेश देखता है, ताकि आप ब्लॉक न करें और इस तरह वैध उपयोगकर्ताओं से आपसे संपर्क करें।
कैप्चा का उपयोग करें यदि आपको संदेह है कि आपकी वेबसाइट एक खुरचनी द्वारा एक्सेस की जा रही है।
स्क्रैपर्स को रोकने के खिलाफ कैप्चा ("कंप्यूटर और मानव को अलग बताने के लिए पूरी तरह से स्वचालित परीक्षण") बहुत प्रभावी हैं। दुर्भाग्य से, वे उपयोगकर्ताओं को परेशान करने में भी बहुत प्रभावी हैं।
इस तरह, वे तब उपयोगी होते हैं जब आपको संभावित स्क्रेपर पर संदेह होता है, और स्क्रैपिंग को रोकना चाहते हैं, बिना एक्सेस को ब्लॉक किए भी अगर यह स्क्रैपर नहीं है बल्कि एक वास्तविक उपयोगकर्ता है। यदि आपको किसी स्क्रैपर पर संदेह है, तो आप सामग्री तक पहुंच की अनुमति देने से पहले एक कैप्चा दिखाने पर विचार कर सकते हैं।
कैप्चा का उपयोग करते समय ध्यान रखने योग्य बातें:
अपना स्वयं का रोल न करें, Google के reCaptcha जैसी किसी चीज़ का उपयोग करें : अपने आप को कैप्चा लागू करने की तुलना में बहुत आसान है, यह कुछ धुंधले और विकृत पाठ समाधान की तुलना में अधिक उपयोगकर्ता के अनुकूल है जो आप स्वयं के साथ आ सकते हैं (उपयोगकर्ताओं को अक्सर केवल एक बॉक्स पर टिक करने की आवश्यकता होती है ), और आपकी साइट से प्राप्त एक साधारण छवि की तुलना में एक ट्रॉटर के लिए यह बहुत कठिन है
HTML मार्कअप में कैप्चा के समाधान को शामिल न करें: मैंने वास्तव में एक वेबसाइट देखी है, जिसमें पेज में ही कैप्चा के लिए समाधान था , (हालांकि काफी अच्छी तरह से छिपा हुआ) इस प्रकार यह बहुत बेकार बना। ऐसा कुछ मत करो। फिर से, reCaptcha जैसी सेवा का उपयोग करें, और आपको इस तरह की समस्या नहीं होगी (यदि आप इसे ठीक से उपयोग करते हैं)।
कैप्चा को थोक में हल किया जा सकता है: कैप्चा-सॉल्विंग सेवाएँ हैं जहां वास्तविक, कम-भुगतान, मनुष्य बल्क में कैप्चा को हल करते हैं। फिर से, reCaptcha का उपयोग करना यहां एक अच्छा विचार है, क्योंकि उनके पास सुरक्षा है (जैसे कि कैप्चा को हल करने के लिए उपयोगकर्ता के पास अपेक्षाकृत कम समय है)। इस तरह की सेवा का उपयोग करने की संभावना नहीं है जब तक कि आपका डेटा वास्तव में मूल्यवान न हो।
एक छवि के रूप में अपनी पाठ सामग्री परोसें
आप एक छवि सर्वर-साइड में पाठ को प्रस्तुत कर सकते हैं, और प्रदर्शित होने के लिए सेवा कर सकते हैं, जो पाठ को निकालने वाले सरल स्क्रैपर्स में बाधा उत्पन्न करेगा।
हालाँकि, यह स्क्रीन रीडर, सर्च इंजन, प्रदर्शन और बाकी सभी चीजों के लिए बहुत बुरा है। यह कुछ स्थानों पर गैरकानूनी है (पहुंच के कारण, जैसे कि विकलांग अमेरिकियों के लिए अधिनियम), और कुछ ओसीआर के साथ चक्कर लगाना भी आसान है, इसलिए ऐसा न करें।
आप सीएसएस स्प्राइट्स के साथ भी कुछ ऐसा कर सकते हैं, लेकिन यह समान समस्याओं से ग्रस्त है।
अपने संपूर्ण डेटासेट को उजागर न करें:
यदि संभव हो, तो अपने सभी डेटासेट प्राप्त करने के लिए एक स्क्रिप्ट / बॉट का रास्ता न दें। एक उदाहरण के रूप में: आपके पास एक समाचार साइट है, जिसमें कई व्यक्तिगत लेख हैं। आप साइट पर खोज के माध्यम से उन लेखों को खोज कर उन्हें केवल सुलभ बना सकते हैं, और यदि आपके पास साइट और उनके URL पर कहीं भी सभी लेखों की सूची नहीं है , तो वे लेख केवल खोज का उपयोग करके सुलभ होंगे सुविधा। इसका मतलब यह है कि आपकी साइट से सभी लेखों को प्राप्त करने की इच्छा रखने वाली स्क्रिप्ट को उन सभी वाक्यांशों की खोज करनी होगी, जो आपके लेखों में उन सभी को खोजने के लिए प्रकट हो सकते हैं, जो समय लेने वाली, बुरी तरह से अक्षम, और उम्मीद करेंगे खुरचनी छोड़ देना।
यह अप्रभावी होगा यदि:
- बॉट / स्क्रिप्ट को वैसे भी पूर्ण डेटासेट की आवश्यकता / आवश्यकता नहीं है।
- आपके लेख एक URL से परोसे जाते हैं, जो कुछ इस तरह दिखता है
example.com/article.php?articleId=12345
। यह (और इसी तरह की चीजें) जो स्क्रेपर्स को सभी articleId
एस पर बस पुनरावृति करने की अनुमति देगा और इस तरह से सभी लेखों का अनुरोध करेगा।
- अंत में सभी लेखों को खोजने के अन्य तरीके हैं, जैसे कि लेखों के भीतर लिंक का पालन करने के लिए एक स्क्रिप्ट लिखकर जो अन्य लेखों की ओर ले जाता है।
- "और" या "" जैसी किसी चीज़ की खोज लगभग हर चीज़ को प्रकट कर सकती है, जिससे कि कुछ पता होना चाहिए। (आप केवल शीर्ष 10 या 20 परिणामों को वापस करके इससे बच सकते हैं)।
- आपको अपनी सामग्री खोजने के लिए खोज इंजन की आवश्यकता है।
अपने API, समापन बिंदु और इसी तरह की चीजों को उजागर न करें:
सुनिश्चित करें कि आप अनजाने में भी, किसी भी एपीआई को उजागर नहीं करते हैं। उदाहरण के लिए, यदि आप अपने डेटा को लोड करने के लिए Adobe Flash या Java Applets (God forbid!) से AJAX या नेटवर्क अनुरोधों का उपयोग कर रहे हैं, तो यह पृष्ठ से नेटवर्क अनुरोधों को देखने और उन अनुरोधों का पता लगाने के लिए तुच्छ है, जहां वे अनुरोध करने जा रहे हैं, और फिर रिवर्स इंजीनियर और एक स्क्रैपर प्रोग्राम में उन समापन बिंदुओं का उपयोग करें। सुनिश्चित करें कि आप अपने समापन बिंदुओं को बाधित करते हैं और उन्हें वर्णित करने के लिए दूसरों के उपयोग के लिए कठिन बनाते हैं।
HTML पार्सर और स्क्रेपर्स को रोकने के लिए:
चूंकि HTML पार्सर HTML में पहचाने जाने वाले पैटर्न के आधार पर पृष्ठों से सामग्री निकालकर काम करते हैं, इसलिए हम जानबूझकर इन स्क्रैपर्स को तोड़ने के लिए उन पैटर्न को ओडर में बदल सकते हैं, या उनके साथ पेंच भी कर सकते हैं। इन युक्तियों में से अधिकांश मकड़ियों और स्क्रीनक्रैपर्स जैसे अन्य स्क्रैपर्स पर भी लागू होती हैं।
बार-बार अपना HTML बदलें
HTML को प्रोसेस करने वाले स्क्रैपर्स आपके HTML पेज के विशिष्ट, पहचान योग्य भागों से सामग्री निकालकर सीधे ऐसा करते हैं। उदाहरण के लिए: यदि आपकी वेबसाइट के सभी पृष्ठों में div
एक आईडी है article-content
, जिसमें लेख का पाठ है, तो यह आपकी साइट पर सभी लेख पृष्ठों पर जाने के लिए एक स्क्रिप्ट लिखने के लिए तुच्छ है, और article-content
div के सामग्री पाठ को निकालना है। प्रत्येक लेख पृष्ठ पर, और ध्वनि, स्क्रैपर में आपकी साइट के सभी लेख एक प्रारूप में होते हैं जिन्हें अन्यत्र पुन: उपयोग किया जा सकता है।
यदि आप HTML और अपने पृष्ठों की संरचना को बार-बार बदलते हैं, तो ऐसे स्क्रैपर्स अब काम नहीं करेंगे।
आप अपने HTML में अक्सर तत्वों की आईडी और कक्षाओं को बदल सकते हैं, शायद स्वचालित रूप से भी। इसलिए, यदि आपका div.article-content
कुछ ऐसा हो जाता है div.a4c36dda13eaf0
, और हर हफ्ते बदलता है, तो स्क्रैपर शुरू में ठीक काम करेगा, लेकिन एक सप्ताह के बाद टूट जाएगा। अपनी आईडी / कक्षाओं की लंबाई भी बदलना सुनिश्चित करें, अन्यथा खुरचनी का उपयोग div.[any-14-characters]
वांछित div खोजने के लिए किया जाएगा। अन्य समान छिद्रों से भी सावधान रहें।
यदि मार्कअप से वांछित सामग्री खोजने का कोई तरीका नहीं है, तो स्क्रैपर HTML संरचना के तरीके से ऐसा करेगा। इसलिए, यदि आपके सभी लेख पृष्ठ समान हैं, जो कि प्रत्येक के div
अंदर div
आता है जो h1
कि लेख सामग्री के बाद आता है, तो स्क्रैपर्स को उस पर आधारित लेख सामग्री मिल जाएगी। फिर, इसे तोड़ने के लिए, आप अपने HTML में समय-समय पर और बेतरतीब ढंग से अतिरिक्त मार्कअप जोड़ सकते हैं / हटा सकते हैं। अतिरिक्त div
एस या span
एस जोड़ना । आधुनिक सर्वर साइड HTML प्रसंस्करण के साथ, यह बहुत कठिन नहीं होना चाहिए।
चीजों के बारे में पता होना चाहिए:
इसे लागू करना, बनाए रखना और डिबग करना थकाऊ और कठिन होगा।
आप कैशिंग में बाधा डालेंगे। विशेष रूप से यदि आप अपने HTML तत्वों की आईडी या कक्षाएं बदलते हैं, तो इसके लिए आपकी सीएसएस और जावास्क्रिप्ट फ़ाइलों में इसी परिवर्तन की आवश्यकता होगी, जिसका अर्थ है कि हर बार जब आप उन्हें बदलते हैं, तो उन्हें ब्राउज़र द्वारा फिर से डाउनलोड करना होगा। यह दोहराए जाने वाले आगंतुकों के लिए लंबे समय तक लोड समय और सर्वर लोड में वृद्धि होगी। यदि आप इसे सप्ताह में केवल एक बार बदलते हैं, तो यह एक बड़ी समस्या नहीं होगी।
चालाक स्क्रेपर्स अभी भी वास्तविक सामग्री है, उदाहरण के लिए, आपकी सामग्री को प्राप्त करने में सक्षम होंगे। यह जानकर कि पृष्ठ पर पाठ का एक बड़ा एकल खंड वास्तविक लेख होने की संभावना है। यह पेज से वांछित डेटा को अभी भी ढूंढना और निकालना संभव बनाता है। बॉयलरपाइप बिल्कुल यही करता है।
अनिवार्य रूप से, सुनिश्चित करें कि स्क्रिप्ट के लिए हर समान पृष्ठ के लिए वास्तविक, वांछित सामग्री ढूंढना आसान नहीं है।
यह भी देखें कि पीएचपी में क्रैटलर्स को विवरणों के लिए पेज कंटेंट प्राप्त करने से कैसे रोका जा सकता है, इसे PHP में कैसे लागू किया जा सकता है।
उपयोगकर्ता के स्थान के आधार पर अपना HTML बदलें
यह पिछले टिप के समान है। यदि आप अपने उपयोगकर्ता के स्थान / देश (IP पते द्वारा निर्धारित) के आधार पर अलग-अलग HTML की सेवा करते हैं, तो यह स्क्रैपर्स को तोड़ सकता है जो उपयोगकर्ताओं को वितरित किए जाते हैं। उदाहरण के लिए, यदि कोई मोबाइल ऐप लिख रहा है जो आपकी साइट के डेटा को स्क्रैप करता है, तो यह शुरू में ठीक काम करेगा, लेकिन जब यह वास्तव में उपयोगकर्ताओं को वितरित किया जाता है, तो टूट जाता है, क्योंकि वे उपयोगकर्ता एक अलग देश में हो सकते हैं, और इस प्रकार अलग-अलग HTML प्राप्त होते हैं, जो एम्बेडेड स्क्रैपर का उपभोग करने के लिए डिज़ाइन नहीं किया गया था।
बार-बार अपना HTML बदलें, ऐसा करने से स्क्रेपर्स के साथ सक्रिय रूप से पेंच!
एक उदाहरण: आपके पास अपनी वेबसाइट पर एक खोज सुविधा है example.com/search?query=somesearchquery
, जो निम्न HTML को लौटाती है:
<div class="search-result">
<h3 class="search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"search-result-link" href="/stories/story-link">Read more</a>
</div>
(And so on, lots more identically structured divs with search results)
जैसा कि आप अनुमान लगा सकते हैं कि यह परिमार्जन करना आसान है: सभी स्क्रैपर को खोज URL को एक क्वेरी के साथ हिट करना होगा, और वांछित HTML से वांछित डेटा को निकालना होगा। समय-समय पर ऊपर वर्णित HTML को बदलने के अलावा, आप पुराने मार्कअप को पुरानी आईडी और कक्षाओं में भी छोड़ सकते हैं , इसे CSS से छिपा सकते हैं, और इसे नकली डेटा से भर सकते हैं, जिससे स्क्रैपर में जहर होता है। यहां बताया गया है कि खोज परिणाम पृष्ठ को कैसे बदला जा सकता है:
<div class="the-real-search-result">
<h3 class="the-real-search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="the-real-search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"the-real-search-result-link" href="/stories/story-link">Read more</a>
</div>
<div class="search-result" style="display:none">
<h3 class="search-result-title">Visit Example.com now, for all the latest Stack Overflow related news !</h3>
<p class="search-result-excerpt">Example.com is so awesome, visit now !</p>
<a class"search-result-link" href="http://example.com/">Visit Now !</a>
</div>
(More real search results follow)
इसका मतलब यह होगा कि वर्गों या आईडी के आधार पर HTML से डेटा निकालने के लिए लिखे गए स्क्रैपर्स लगातार काम करते रहेंगे, लेकिन उन्हें नकली डेटा या यहां तक कि विज्ञापन भी मिलेंगे, जो वास्तविक उपयोगकर्ता कभी नहीं देखेंगे, क्योंकि वे CSS के साथ छिपे हुए हैं।
स्क्रैपर के साथ पेंच: अपने पेज में नकली, अदृश्य हनीपोट डेटा डालें
पिछले उदाहरण में जोड़कर, आप स्क्रेपर्स को पकड़ने के लिए अपने HTML में अदृश्य हनीपॉट आइटम जोड़ सकते हैं। एक उदाहरण जो पहले वर्णित खोज परिणाम पृष्ठ में जोड़ा जा सकता है:
<div class="search-result" style="display:none">
<h3 class="search-result-title">This search result is here to prevent scraping</h3>
<p class="search-result-excerpt">If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-)
Note that clicking the link below will block access to this site for 24 hours.</p>
<a class"search-result-link" href="/scrapertrap/scrapertrap.php">I'm a scraper !</a>
</div>
(The actual, real, search results follow.)
सभी खोज परिणामों को प्राप्त करने के लिए लिखी गई एक खुरचनी इसे उठा लेगी, ठीक उसी तरह, जैसे पृष्ठ पर वास्तविक खोज परिणाम, और वांछित सामग्री की तलाश में, लिंक पर जाएँ। एक वास्तविक मानव कभी भी इसे पहली जगह में नहीं देखेगा (क्योंकि यह सीएसएस के साथ छिपा हुआ है), और लिंक पर नहीं जाएगा। एक वास्तविक और वांछनीय स्पाइडर जैसे कि Google लिंक पर नहीं जाएगा क्योंकि आपने /scrapertrap/
अपने robots.txt में अस्वीकृत किया था।
आप अपने scrapertrap.php
आईपी पते के लिए ब्लॉक एक्सेस की तरह कुछ कर सकते हैं जो उस पर गया या उस आईपी से सभी बाद के अनुरोधों के लिए कैप्चा को मजबूर कर सकता है।
/scrapertrap/
अपनी robots.txt फ़ाइल में अपने honeypot ( ) को हटाना न भूलें ताकि खोज इंजन बॉट्स उसमें न पड़े।
आप अपने HTML को बार-बार बदलने के पिछले टिप के साथ इसे जोड़ सकते हैं / कर सकते हैं।
इसे बार-बार बदलें, क्योंकि स्क्रैपर्स अंततः इससे बचना सीखेंगे। हनीपोट URL और पाठ बदलें। इसके अलावा इनलाइन सीएसएस को छुपाने के लिए इस्तेमाल करने पर विचार करना चाहते हैं, और इसके बजाय एक आईडी विशेषता और बाहरी सीएसएस का उपयोग करें, क्योंकि स्क्रैपर्स कुछ भी से बचने के लिए सीखेंगे जिसमें style
सीएसएस के साथ एक विशेषता है जो सामग्री को छिपाने के लिए उपयोग किया जाता है। केवल कभी-कभी इसे सक्षम करने का प्रयास करें, इसलिए स्क्रैपर शुरू में काम करता है, लेकिन थोड़ी देर बाद टूट जाता है। यह पिछले टिप पर भी लागू होता है।
दुर्भावनापूर्ण लोग आपके हनीपोट का लिंक साझा करके, या उस लिंक को एक छवि के रूप में कहीं भी एम्बेड कर सकते हैं (जैसे कि एक मंच पर)। URL को बार-बार बदलें, और किसी भी प्रतिबंध के समय को अपेक्षाकृत कम करें।
यदि आप एक खुरचनी का पता लगाते हैं तो नकली और बेकार डेटा परोसें
यदि आप पता लगाते हैं कि स्पष्ट रूप से एक खुरचनी है, तो आप नकली और बेकार डेटा की सेवा कर सकते हैं; यह उस डेटा को दूषित कर देगा जो स्क्रैपर आपकी वेबसाइट से प्राप्त करता है। आपको ऐसे नकली डेटा को वास्तविक डेटा से अलग करना असंभव बनाना चाहिए, ताकि स्क्रेपर्स को यह पता न चले कि वे खराब हो रहे हैं।
उदाहरण के रूप में: आपके पास एक समाचार वेबसाइट है; यदि आप एक खुरचनी का पता लगाते हैं, तो पहुंच को अवरुद्ध करने के बजाय, नकली, बेतरतीब ढंग से उत्पन्न लेखों की सेवा करें, और यह डेटा को प्राप्त करने वाले को जहर देगा। यदि आप अपने नकली डेटा को वास्तविक चीज़ से अप्रभेद्य बनाते हैं, तो आपको स्क्रैपर्स के लिए यह मुश्किल हो जाएगा कि वे क्या चाहते हैं, अर्थात वास्तविक, वास्तविक डेटा।
यदि उपयोगकर्ता एजेंट खाली / गायब है, तो अनुरोध स्वीकार न करें
अक्सर, आलसी लिखित स्क्रैपर्स अपने अनुरोध के साथ एक उपयोगकर्ता एजेंट हेडर नहीं भेजेंगे, जबकि सभी ब्राउज़रों और साथ ही खोज इंजन मकड़ियों करेंगे।
यदि आपको एक अनुरोध मिलता है जहां उपयोगकर्ता एजेंट हेडर मौजूद नहीं है, तो आप कैप्चा दिखा सकते हैं, या बस पहुंच को सीमित या सीमित कर सकते हैं। (या ऊपर वर्णित के रूप में नकली डेटा की सेवा, या कुछ और ..)
यह बिगाड़ने के लिए तुच्छ है, लेकिन खराब लिखे स्क्रैपर्स के खिलाफ एक उपाय के रूप में यह लागू करने के लायक है।
यदि उपयोगकर्ता एजेंट एक सामान्य खुरचनी है, तो अनुरोध स्वीकार न करें; स्क्रैपर्स द्वारा उपयोग की जाने वाली ब्लैक लिस्ट
कुछ मामलों में, स्क्रैपर्स एक उपयोगकर्ता एजेंट का उपयोग करेगा जो कोई वास्तविक ब्राउज़र या खोज इंजन मकड़ी का उपयोग नहीं करता है, जैसे:
- "मोज़िला" (बस यही, और कुछ नहीं। मैंने यहाँ पर स्क्रैप करने के बारे में कुछ प्रश्न देखे हैं, इसका उपयोग करते हुए। एक वास्तविक ब्राउज़र केवल कभी नहीं होगा))
- "Java 1.7.43_u43" (डिफ़ॉल्ट रूप से, Java का HttpUrlConnection कुछ इस तरह का उपयोग करता है)।
- "बिज़्को इज़ीस्कैपिंग स्टूडियो 2.0"
- "wget", "curl", "libcurl", .. (Wget और cURL का उपयोग कभी-कभी स्क्रैप स्क्रैप के लिए किया जाता है)
यदि आप पाते हैं कि किसी विशिष्ट उपयोगकर्ता एजेंट स्ट्रिंग का उपयोग आपकी साइट पर स्क्रैपर्स द्वारा किया जाता है, और इसका उपयोग वास्तविक ब्राउज़र या वैध मकड़ियों द्वारा नहीं किया जाता है, तो आप इसे अपनी ब्लैकलिस्ट में भी जोड़ सकते हैं।
यदि यह संपत्ति (सीएसएस, चित्र) का अनुरोध नहीं करता है, तो यह एक वास्तविक ब्राउज़र नहीं है।
एक वास्तविक ब्राउज़र (लगभग हमेशा) छवियों और सीएसएस जैसी परिसंपत्तियों का अनुरोध और डाउनलोड करेगा। HTML पार्सर और स्क्रेपर्स नहीं होंगे क्योंकि वे केवल वास्तविक पृष्ठों और उनकी सामग्री में रुचि रखते हैं।
आप अपनी संपत्ति के लिए अनुरोधों को लॉग कर सकते हैं, और यदि आप केवल HTML के लिए बहुत सारे अनुरोध देखते हैं, तो यह एक खुरचनी हो सकती है।
खोज इंजन बॉट, प्राचीन मोबाइल उपकरण, स्क्रीन रीडर और गलत डिवाइसों से सावधान रहें कि संपत्ति का अनुरोध न करें।
कुकीज़ का उपयोग और आवश्यकता; उपयोगकर्ता और खुरचने वाले कार्यों को ट्रैक करने के लिए उनका उपयोग करें।
अपनी वेबसाइट देखने के लिए आपको कुकीज़ को सक्षम करने की आवश्यकता हो सकती है। यह अनुभवहीन और नौसिखिया स्क्रैपर लेखकों को रोक देगा, हालांकि एक स्क्रेपर के लिए कुकीज़ भेजना आसान है। यदि आप उनका उपयोग करते हैं और उनकी आवश्यकता होती है, तो आप उपयोगकर्ता को ट्रैक कर सकते हैं और उनके साथ क्रियाओं को ट्रैक कर सकते हैं, और इस प्रकार प्रति-आईपी आधार के बजाय प्रति-उपयोगकर्ता पर रेट-लिमिटिंग, ब्लॉकिंग या कैप्चा दिखा सकते हैं।
उदाहरण के लिए: जब उपयोगकर्ता खोज करता है, तो एक विशिष्ट पहचान कुकी सेट करें। जब परिणाम पृष्ठ देखे जाते हैं, तो उस कुकी को सत्यापित करें। यदि उपयोगकर्ता सभी खोज परिणाम खोलता है (आप कुकी से बता सकते हैं), तो यह संभवतः एक खुरचनी है।
कुकीज़ का उपयोग करना अप्रभावी हो सकता है, क्योंकि स्क्रैपर्स कुकीज़ को अपने अनुरोधों के साथ भी भेज सकते हैं, और आवश्यकतानुसार उन्हें त्याग सकते हैं। आप वास्तविक उपयोगकर्ताओं के लिए भी पहुंच को रोकेंगे जिनकी कुकीज़ अक्षम हैं, यदि आपकी साइट केवल कुकीज़ के साथ काम करती है।
ध्यान दें कि यदि आप कुकी को सेट और पुनः प्राप्त करने के लिए जावास्क्रिप्ट का उपयोग करते हैं, तो आप स्क्रैपर्स को ब्लॉक करेंगे जो जावास्क्रिप्ट को नहीं चलाते हैं, क्योंकि वे कुकी को उनके अनुरोध के साथ पुनर्प्राप्त और भेज नहीं सकते हैं।
अपनी सामग्री लोड करने के लिए JavaScript + Ajax का उपयोग करें
पृष्ठ के लोड होने के बाद आप अपनी सामग्री को लोड करने के लिए जावास्क्रिप्ट + AJAX का उपयोग कर सकते हैं। यह HTML पार्सर्स के लिए सामग्री को अप्राप्य बना देगा जो जावास्क्रिप्ट को नहीं चलाते हैं। यह अक्सर नौसिखिया और अनुभवहीन प्रोग्रामर को स्क्रेपर्स लिखने के लिए एक प्रभावी निवारक है।
से बच:
वास्तविक सामग्री लोड करने के लिए जावास्क्रिप्ट का उपयोग करना उपयोगकर्ता के अनुभव और प्रदर्शन को नीचा दिखाएगा
खोज इंजन जावास्क्रिप्ट को भी नहीं चला सकते हैं, इस प्रकार उन्हें आपकी सामग्री को अनुक्रमित करने से रोकते हैं। यह खोज परिणाम पृष्ठों के लिए समस्या नहीं हो सकती है, लेकिन अन्य चीज़ों के लिए हो सकती है, जैसे कि लेख पृष्ठ।
अपने मार्कअप, स्क्रिप्ट्स से नेटवर्क अनुरोध और बाकी सब चीज़ों पर ध्यान दें।
यदि आप अपने डेटा को लोड करने के लिए अजाक्स और जावास्क्रिप्ट का उपयोग करते हैं, तो स्थानांतरित किए गए डेटा को बाधित करें। एक उदाहरण के रूप में, आप सर्वर पर अपने डेटा को सांकेतिक शब्दों में बदलना कर सकते हैं (बेस 64 या अधिक जटिल के रूप में सरल रूप से कुछ के साथ), और फिर अजाक्स के माध्यम से लाने के बाद, ग्राहक को डिकोड और प्रदर्शित करें। इसका मतलब यह होगा कि नेटवर्क ट्रैफ़िक का निरीक्षण करने वाला कोई व्यक्ति तुरंत यह नहीं देखेगा कि आपका पृष्ठ कैसे काम करता है और डेटा लोड करता है, और यह आपके एंडपॉइंट्स से सीधे डेटा का अनुरोध करने के लिए किसी के लिए कठिन होगा, क्योंकि उन्हें आपके अवरोही एल्गोरिदम को रिवर्स-इंजीनियर करना होगा।
यदि आप डेटा लोड करने के लिए अजाक्स का उपयोग करते हैं, तो आपको पृष्ठ को पहले लोड किए बिना एंडपॉइंट्स का उपयोग करना कठिन बनाना चाहिए, जैसे कि एक पैरामीटर के रूप में कुछ सत्र कुंजी की आवश्यकता होती है, जिसे आप अपने जावास्क्रिप्ट या HTML में एम्बेड कर सकते हैं।
आप अपने ओफ़्फ़ुसेटेड डेटा को प्रारंभिक HTML पेज में सीधे एम्बेड कर सकते हैं और जावास्क्रिप्ट का उपयोग डीबॉफसेट करने और इसे प्रदर्शित करने के लिए कर सकते हैं, जो अतिरिक्त नेटवर्क अनुरोधों से बचना होगा। ऐसा करने से HTML-केवल पार्सर का उपयोग करके डेटा को निकालना काफी कठिन हो जाएगा जो जावास्क्रिप्ट को नहीं चलाता है, क्योंकि स्क्रैपर को लिखने वाले को आपके जावास्क्रिप्ट को रिवर्स इंजीनियर करना होगा (जिसे आपको बहुत अधिक बाधित करना चाहिए)।
आप नियमित रूप से अपने मोटापे के तरीकों को बदलना चाहते हैं, जो स्क्रैपर्स को तोड़ने के लिए इसे बाहर निकालते हैं।
हालांकि ऐसा करने के कई नुकसान हैं, हालांकि:
इसे लागू करना, बनाए रखना और डिबग करना थकाऊ और कठिन होगा।
यह स्क्रेपर्स और स्क्रीनक्रापर्स के खिलाफ अप्रभावी होगा जो वास्तव में जावास्क्रिप्ट चलाते हैं और फिर डेटा निकालते हैं। (अधिकांश सरल HTML पार्सर जावास्क्रिप्ट को नहीं चलाते हैं)
यदि वे जावास्क्रिप्ट अक्षम हैं तो यह आपकी साइट को वास्तविक उपयोगकर्ताओं के लिए अप्रभावी बना देगा।
प्रदर्शन और पृष्ठ-लोड समय भुगतना होगा।
गैर तकनिकि:
लोगों से कहें कि वे हाथापाई न करें, और कुछ इसका सम्मान करेंगे
एक वकील खोजें
अपना डेटा उपलब्ध करें, एक एपीआई प्रदान करें:
आप अपना डेटा आसानी से उपलब्ध करा सकते हैं और इसके लिए रोपण और आपकी साइट पर लिंक की आवश्यकता होती है। शायद इसके लिए $ $ $ चार्ज करते हैं।
विविध:
क्लाउडफ़ेयर या डिस्टिल नेटवर्क्स द्वारा एंटी-स्क्रेपिंग जैसे कि यह कैसे काम करता है ( यहां यह कैसे काम करता है ) पर विवरण , जो इन चीजों को करते हैं और आपके लिए और भी हैं।
वास्तविक उपयोगकर्ताओं और स्क्रैपर प्रूफनेस के लिए प्रयोज्य के बीच एक संतुलन खोजें: आप जो कुछ भी करते हैं वह उपयोगकर्ता के अनुभव को एक या दूसरे तरीके से नकारात्मक रूप से प्रभावित करेगा, समझौता खोजें।
अपनी मोबाइल साइट और ऐप्स को न भूलें। यदि आपके पास एक मोबाइल ऐप है, जिसे स्क्रीनक्रैप भी किया जा सकता है, और नेटवर्क ट्रैफ़िक का निरीक्षण उसके द्वारा उपयोग किए जाने वाले REST के समापन बिंदुओं को निर्धारित करने के लिए किया जा सकता है।
स्क्रेपर्स अन्य स्क्रेपर्स को स्क्रैप कर सकते हैं: यदि कोई ऐसी वेबसाइट है जिस पर आपकी सामग्री स्क्रैप की गई है, तो अन्य स्क्रैपर उस स्क्रैपर की वेबसाइट से स्क्रैप कर सकते हैं।
आगे की पढाई: