2009-01-08 11 views
16

मैं अपने उपयोगकर्ताओं के लिए आंकड़े बना रहा हूं और बॉट्स की यात्राओं की गणना नहीं करना चाहता हूं।php के साथ बॉट को कैसे पहचानें?

अब मेरे पास एक मूल PHP है जिसमें प्रत्येक बार पेज को कॉल किया जाता है।

लेकिन बॉट भी गिनती में जोड़े गए हैं।

क्या कोई भी इस तरह से सोच सकता है?

मुख्य रूप से केवल प्रमुख लोग हैं जो गड़बड़ करते हैं। Google, याहू, एमएसएन, आदि

उत्तर

9

आपको उपयोगकर्ता-एजेंट स्ट्रिंग द्वारा फ़िल्टर करना चाहिए। आप यहां बॉट्स द्वारा दिए गए लगभग 300 आम उपयोगकर्ता-एजेंटों की एक सूची पा सकते हैं: http://www.robotstxt.org/db.html उस सूची के माध्यम से चलना और आपके SQL कथन चलाने से पहले बॉट उपयोगकर्ता-एजेंटों को अनदेखा करना सभी व्यावहारिक उद्देश्यों के लिए आपकी समस्या का समाधान करना चाहिए।

यदि आप नहीं चाहते हैं कि खोज इंजन पृष्ठ तक पहुंच जाएं, तो उन्हें अवरोधित करने के लिए मूल robots.txt फ़ाइल का उपयोग करें।

0

क्या आपने उनकी उपयोगकर्ता-एजेंट जानकारी द्वारा उन्हें पहचानने का प्रयास किया है? एक साधारण Google खोज आपको Google आदि द्वारा उपयोग किए जाने वाले उपयोगकर्ता-एजेंटों को देना चाहिए।

यह निश्चित रूप से मूर्ख नहीं है, लेकिन प्रमुख कंपनियों द्वारा अधिकांश क्रॉलर एक अलग उपयोगकर्ता-एजेंट की आपूर्ति करते हैं।

संपादित करें: मान लें कि आप बॉट्स एक्सेस को प्रतिबंधित नहीं करना चाहते हैं, लेकिन बस अपने स्टेटिस्ट में इसकी यात्रा को गिनें नहीं।

2

पेज दृश्य गणना बढ़ाने से पहले user agent देखें, लेकिन याद रखें कि इसे धोखा दिया जा सकता है। पीएचपी उपयोगकर्ता एजेंट को $_SERVER['HTTP_USER_AGENT'] में उजागर करता है, यह मानते हुए कि वेब सर्वर इसे इस जानकारी के साथ प्रदान करता है। $_SERVER के बारे में अधिक जानकारी http://www.php.net/manual/en/reserved.variables.server.php पर मिल सकती है।

आप http://www.user-agents.org पर उपयोगकर्ता एजेंटों की एक सूची पा सकते हैं; गुगलिंग प्रमुख प्रदाताओं से संबंधित लोगों के नाम भी प्रदान करेगा। यदि आप उन्हें एकत्र कर सकते हैं तो एक तीसरा संभावित स्रोत आपके वेब सर्वर का एक्सेस लॉग होगा।

22

आप उपयोगकर्ता एजेंट स्ट्रिंग, खाली तार, या 'रोबोट', 'स्पाइडर', 'क्रॉलर', 'कर्ल' युक्त तारों को रोबोट होने की संभावना है।

preg_match('/robot|spider|crawler|curl|^$/i', $_SERVER['HTTP_USER_AGENT']));

+6

बहुत उपयोगी। यदि आप सबसे सक्रिय रोबोटों में से किसी एक से मेल खाने के लिए ** रोबोट ** ** बॉट ** के साथ ** रोबोट ** को प्रतिस्थापित करते हैं तो भी अधिक उपयोगी: 'मोज़िला/5.0 (संगत; Googlebot/2.1; + http: //www.google.com/bot। एचटीएमएल) ' –

+0

मैं" googlebot "के खिलाफ मिलान करने की अनुशंसा करता हूं, क्योंकि" बॉट "के खिलाफ मिलान संभावित संभावित सौम्य उपयोगकर्ता एजेंटों को बाहर कर सकता है। – yagooar

+2

मैंने http://www.useragentstring.com/pages/Browserlist/ पर "बॉट" की खोज की और मुझे कोई हिट नहीं मिली .. इसलिए मुझे लगता है कि मिलान "बॉट" को गलत सकारात्मक नहीं फेंकना चाहिए। – tomwoods

6

हम अपने आप को एक ऐसी ही यूज-केस किया है, और एक ही विकल्प हम हाल ही में पाया है काफी मददगार user-agent-string.info से UASParser class है।

यह एक PHP वर्ग है जो उपयोगकर्ता एजेंट स्ट्रिंग परिभाषाओं का नवीनतम सेट खींचता है और उन्हें स्थानीय रूप से कैश करता है। कक्षा को परिभाषित करने के लिए कॉन्फ़िगर किया जा सकता है जितनी बार आप समझते हैं उतनी बार या शायद ही कभी। स्वचालित रूप से उन्हें इस तरह लाने का अर्थ यह है कि आपको उपयोगकर्ता एजेंटों या बाज़ार में आने वाले नए लोगों के लिए विभिन्न परिवर्तनों के शीर्ष पर ध्यान नहीं रखना है, हालांकि आप इसे सही तरीके से करने के लिए UAS.info पर निर्भर हैं।

जब कक्षा कहा जाता है, तो यह वर्तमान विज़िटर के उपयोगकर्ता एजेंट को पार करता है और घटक भागों को तोड़ने वाला एक सहयोगी सरणी देता है, उदाहरण के लिए

Array 
(
    [typ] => browser 
    [ua_family] => Firefox 
    [ua_name] => Firefox 3.0.8 
    [ua_url] => http://www.mozilla.org/products/firefox/ 
    [ua_company] => Mozilla Foundation 
    ........ 
    [os_company] => Microsoft Corporation. 
    [os_company_url] => http://www.microsoft.com/ 
    [os_icon] => windowsxp.png 
) 

क्षेत्र typbrowser करने के लिए सेट जब यूए संभावना एक मानव आगंतुक, जिस स्थिति में आप अपनी आंकड़ा अद्यतन कर सकते हैं करने के लिए संबंधित के रूप में पहचाना जाता है है। यहाँ चेतावनियां की

युगल:

  • आप उपयोगकर्ता एजेंट सटीक और अप-टू-डेट गूगल और याहू जैसे
  • बॉट अपने आप में घोषित होने के लिए प्रदान की तार के लिए UAS.info में निर्भर हैं, उनके उपयोगकर्ता एजेंट तार, लेकिन यह विधि अभी भी मानव आगंतुकों (स्पूफेड UAs भेजने) का दावा करने वाले बॉट्स से विज़िट की गणना करेगी
  • ऊपर वर्णित @amdfan के रूप में, robots.txt के माध्यम से बॉट को अवरुद्ध करने से उनमें से अधिकांश को आपके पृष्ठ तक पहुंचने से रोकना चाहिए। यदि आपको अनुक्रमित करने की सामग्री की आवश्यकता है लेकिन आंकड़े बढ़ाना नहीं है, तो robots.txt विधि यथार्थवादी विकल्प नहीं होगी
संबंधित मुद्दे