2010-03-24 13 views
11

के साथ क्रॉलर नहीं करता है, मैं एक रेगेक्सपी बनाने की कोशिश कर रहा हूं जो User-Agent: "मनुष्यों द्वारा नेविगेट किए गए ब्राउज़र" के लिए सत्य का मूल्यांकन करेगा, लेकिन इसके लिए झूठा बॉट। यह कहने की जरूरत नहीं है कि मिलान सटीक नहीं होगा, लेकिन अगर यह सही है तो 90% मामलों में यह सही कहता है।Regexp जो एंड-यूजर ब्राउज़र के उपयोगकर्ता-एजेंट से मेल खाता है लेकिन 90% सटीकता

मेरा दृष्टिकोण अब तक पांच प्रमुख डेस्कटॉप ब्राउज़र (एमएसआईई, फ़ायरफ़ॉक्स, क्रोम, सफारी, ओपेरा) की User-Agent स्ट्रिंग को लक्षित करना है। विशेष रूप से मैं regexp नहीं से मेल खाता हूं यदि उपयोगकर्ता-एजेंट एक बॉट (Googlebot, msnbot, आदि) है।

^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$ 

मैं मिथ्या नकारात्मक जो ज्यादातर मोबाइल ब्राउज़रों हैं की छोटी संख्या देखा होगा:

वर्तमान में मैं निम्नलिखित regexp जो वांछित परिशुद्धता प्राप्त करने के लिए प्रकट होता है उपयोग कर रहा हूँ। अपवाद सभी मैच:

(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson) 

मेरा प्रश्न है: वांछित सटीकता स्तर को देखते हुए, आप कैसे regexp में सुधार होगा? क्या आप किसी भी बड़े झूठे सकारात्मक या दिए गए रेगेक्स के झूठे नकारात्मक विचारों के बारे में सोच सकते हैं?

कृपया ध्यान दें कि प्रश्न विशेष रूप से regexp- आधारित User-Agent मिलान के बारे में है। इस समस्या को हल करने के लिए अन्य दृष्टिकोणों का एक समूह है, लेकिन वे इस प्रश्न के दायरे से बाहर हैं।

+1

बॉट कि ब्राउज़र के रूप में पहचान की क्या उपयोग है? – Macha

+0

माचा: जाहिर है उन्हें ब्राउज़र के रूप में वर्गीकृत किया जाएगा। लेकिन जब तक ये दुर्लभ होते हैं, वे निर्दिष्ट सटीकता लक्ष्य को देखते हुए कोई समस्या नहीं होगी। – knorv

+0

हाँ, आपकी वेबसाइट के माध्यम से एक बॉट चलाने वाला एरियल ईमानदार है। सबसे अच्छा समाधान यह है कि आप यहां क्या कर रहे हैं और आप इसके बारे में कैसे जा रहे हैं पर पुनर्विचार करना है। अधिकांश लोग उपयोगकर्ता एजेंट के बजाय व्यवहार (बहुत कम समय में विभिन्न पृष्ठों में) द्वारा बॉट स्पॉट करना पसंद करते हैं। – Will

उत्तर

7

कई क्रॉलर एक स्वीकार्य-भाषा शीर्षलेख नहीं भेजते हैं, जबकि सभी ब्राउज़र AFAIK करते हैं। अधिक सटीक परिणाम प्राप्त करने के लिए आप इस जानकारी को अपने रेगेक्स से जोड़ सकते हैं।

+0

एकमात्र ऐसा मैंने देखा है जो यह अवज्ञा करता है वह स्लर्प है: [मोज़िला/5.0 (संगत; याहू! स्लर्प; http://help.yahoo.com/help/us/ysearch/slurp)] [en-us, en ; q = 0.5] और यदि आप मीडिया की सेवा कर रहे हैं तो मुझे लगता है कि कभी-कभी ब्राउज़र प्लगइन्स आईई में स्वीकार्य भाषा के बिना अनुरोध करते हैं (इसलिए यह एक गैर-बॉट है, लेकिन स्वीकृति-भाषा नहीं भेजता है)। इसके अलावा Google अनुवाद एक स्वीकार्य भाषा नहीं भेजता है, लेकिन आम तौर पर यह विधि अच्छी तरह से काम करती प्रतीत होती है। – rogerdpack

+0

तो, जहां तक ​​तर्क है: क्या आप सोच रहे हैं कि 'अगर (regex_matches || has_header) {is_human}' या आप सोच रहे हैं कि अगर (regex_matches && has_header) {is_human} बेहतर होगा –

+0

@ नाथन जे ब्रूउर 'और' , 'OR' नहीं। अभी भी बिल्कुल विश्वसनीय नहीं है, लेकिन वैसे भी यह संभव नहीं है। – fuxia

22

आप यह जांच कर एक ब्लैकलिस्ट बना सकते हैं कि कौन से उपयोगकर्ता एजेंट robots.txt तक पहुंचते हैं।

+0

दिलचस्प अवधारणा! बॉक्स के बाहर सोचने का तरीका। –

+0

बहुत बढ़िया विचार! आपको इसके लिए समर्थक और वोट देना चाहता था :)। –

4

मैं नहीं बल्कि विपरीत का उपयोग कर चाहते हैं, बॉट के लिए एक पैटर्न होने बहुत सरल

व्यक्तिगत रूप से मैं निम्नलिखित regex

/bot\b|index|spider|crawl|wget|slurp|Mediapartners-Google/i 
+1

यह खतरनाक है। मुझे यह फ़िल्टर किया गया है 'मोज़िला/5.0 (लिनक्स; यू; एंड्रॉइड 3.0.1; एन-यूएस; स्मोक बिल्ड/एचआरआई 66 की बोतल) ऐप्पलवेबकिट/534.13 (केएचटीएम, जैसे गेको) संस्करण/4.0 सफारी/534।13 ', और मैंने इसे केवल उपयोगकर्ता एजेंटों के उप-समूह पर चलाया जो हमने कभी देखा है। –

+0

'/ bot \ b | ...' :-) 'इंडेक्स' के बारे में निश्चित नहीं है, क्योंकि कुछ प्लगइन्स उपयोगकर्ता एजेंट तारों के लिए कुछ अजीब चीजें करते हैं (विशेष रूप से आईई में, लम्बाई को दबाकर) – Tracker1

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