दिलचस्प पोस्ट
कितना सच है "गति चाहते हैं? मूल्य से गुजारें " .NET String.Format () संख्या के लिए हजारों स्थान पर अल्पविराम जोड़ना पाठ के बीच का अंतर कैसे बढ़ाएं और सीएसएस में अधोरेखण कैसे करें एंड्रॉइड स्टूडियो: एंड्रॉइड एसडीके स्रोतों को कैसे जोडें? अप्रबंधित कोड के लिए सी ++ / सीएलआई पास (प्रबंधित) प्रतिनिधि उद्देश्य सी नाम स्थान की टक्कर को हल करने का सबसे अच्छा तरीका क्या है? जावास्क्रिप्ट / JQuery: $ (विंडो)। पुनः आकार के पूरा होने के बाद कैसे आग लगाएगा? आवेदन / एक्स-www-फ़ॉर्म-यूआरएलएक्सोड या मल्टीपार्ट / फॉर्म-डेटा? एक फ़ाइल के नवीनीकरण को मजबूर करते हुए कि इसकी प्रारंभिक स्थापना के दौरान संशोधित किया गया है कैसे एक पासवर्ड prompt बिना एक mysqldump करने के लिए? टंकिनर विजेट में एक सबप्रोसेस का रीयलटाइम आउटपुट दिखाएं IPhone के लिए व्यूपोर्ट मेटा कैसे सेट करना है जो ठीक से रोटेशन को संभालता है? कैसे JProgressBar रंग बदलने के लिए? स्ट्रिंग को पार्स करें जैसे कि यह रेल पर रूबी में एक क्वेरी स्ट्रिंग थे बाहरी कक्षा के "इस" को आंतरिक कक्षा से कैसे पहुंचा जा सकता है?

Urllib2.urlopen पर उपयोगकर्ता एजेंट बदलना

मैं urlib2.urlopen पर डिफ़ॉल्ट उपयोगकर्ता के अलावा एक उपयोगकर्ता एजेंट के साथ वेबपेज कैसे डाउनलोड कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "Urllib2.urlopen पर उपयोगकर्ता एजेंट बदलना"

उपयोगकर्ता-एजेंट को प्रत्येक के पसंदीदा डाइव इनट पायथन से सेट करना

छोटी कहानी: आप ऐसा करने के लिए Request.add_header का उपयोग कर सकते हैं।

आप एक ही शब्दकोश के रूप में हेडर को भी अनुरोध कर सकते हैं, जब डॉक्स नोट के रूप में ही अनुरोध करें:

हेडर एक शब्दकोश होना चाहिए, और उन्हें समझा जाएगा जैसे add_header() को प्रत्येक कुंजी और मान के रूप में तर्क के रूप में बुलाया गया था। यह अक्सर User-Agent हेडर "स्पूफ़" के लिए प्रयोग किया जाता है, जिसका उपयोग ब्राउज़र के लिए खुद को पहचानने के लिए किया जाता है – कुछ एचटीटीयू सर्वर केवल स्क्रिप्ट्स के विरोध में सामान्य ब्राउज़र से आने वाले अनुरोधों को अनुमति देते हैं। उदाहरण के लिए, मोज़िला फ़ायरफ़ॉक्स खुद को "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11" रूप में पहचान सकता है, जबकि urllib2 का डिफ़ॉल्ट उपयोगकर्ता एजेंट स्ट्रिंग "Python-urllib/2.6" (पायथन पर 2.6)।

मैंने कुछ हफ़्ते पहले एक समान प्रश्न का उत्तर दिया

उस प्रश्न का उदाहरण कोड है, लेकिन मूल रूप से आप ऐसा कुछ कर सकते हैं: ( आरएफसी 2616 , धारा 14.43 के रूप में User-Agent के कैपिटल अक्षरों पर ध्यान दें।)

 opener = urllib2.build_opener() opener.addheaders = [('User-Agent', 'Mozilla/5.0')] response = opener.open('http://www.stackoverflow.com') 
 headers = { 'User-Agent' : 'Mozilla/5.0' } req = urllib2.Request('www.example.com', None, headers) html = urllib2.urlopen(req).read() 

या थोड़ी छोटी:

 req = urllib2.Request('www.example.com', headers={ 'User-Agent': 'Mozilla/5.0' }) html = urllib2.urlopen(req).read() 

अजगर 3 के लिए, urlib को 3 मॉड्यूल में विभाजित किया गया है …

 import urllib.request req = urllib.request.Request(url="http://localhost/",data=b'None',headers={'User-Agent':' Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'}) handler = urllib.request.urlopen(req) 

इन सभी को सिद्धांत में काम करना चाहिए, लेकिन (जब आप कम से कम Windows पर पायथन 2.7.2 पर) कस्टम यूजर एजेंट हेडर भेजते हैं, urllib2 उस हेडर को नहीं भेजता है। यदि आप उपयोगकर्ता-एजेंट हेडर भेजने का प्रयास नहीं करते हैं, तो यह डिफ़ॉल्ट पायथन / urllib2 भेजता है

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

 opener = urllib2.build_opener(proxy) opener.addheaders = {'User-agent':'Custom user agent'} urllib2.install_opener(opener) request = urllib2.Request(url, headers={'User-agent':'Custom user agent'}) request.headers['User-agent'] = 'Custom user agent' request.add_header('User-agent', 'Custom user agent') 

urllib आप उपयोग कर सकते हैं:

 from urllib import FancyURLopener class MyOpener(FancyURLopener, object): version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11' myopener = MyOpener() myopener.retrieve('https://www.google.com/search?q=test', 'useragent.html') 

urllib2 और पायथन 2.7 में एक अन्य समाधान:

 req = urllib2.Request('http://www.example.com/') req.add_unredirected_header('User-Agent', 'Custom User-Agent') urllib2.urlopen(req) 

इसे इस्तेमाल करे :

 html_source_code = requests.get("http://www.example.com/", headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36', 'Upgrade-Insecure-Requests': '1', 'x-runtime': '148ms'}, allow_redirects=True).content 

urllib.URLopener() दो गुण हैं: अर्थात्:
addheaders = [('User-Agent', 'Python-urllib/1.17'), ('Accept', '*/*')] और
version = 'Python-urllib/1.17'
वेबसाइट को बेवकूफ़ बनाने के लिए आपको इन दोनों मूल्यों को स्वीकार्य उपयोगकर्ता-एजेंट में बदलने की जरूरत है उदाहरण के लिए
क्रोम ब्राउज़र: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36'
Google बॉट: 'Googlebot/2.1'
इस तरह

 import urllib page_extractor=urllib.URLopener() page_extractor.addheaders = [('User-Agent', 'Googlebot/2.1'), ('Accept', '*/*')] page_extractor.version = 'Googlebot/2.1' page_extractor.retrieve(<url>, <file_path>) 

बस एक संपत्ति बदलना काम नहीं करता है क्योंकि वेबसाइट उसे एक संदिग्ध अनुरोध के रूप में चिह्नित करती है।