पर उपयोगकर्ता एजेंट को बदलना मैं urllib2.urlopen पर डिफ़ॉल्ट के अलावा उपयोगकर्ता एजेंट के साथ एक वेबपृष्ठ कैसे डाउनलोड कर सकता हूं?urllib2.urlopen
उत्तर
Setting the User-Agent हर किसी के पसंदीदा Dive Into Python से।
छोटी कहानी: आप ऐसा करने के लिए Request.add_header का उपयोग कर सकते हैं।
तुम भी एक शब्दकोश के रूप में हेडर जब अनुरोध ही है, as the docs note बनाने पारित कर सकते हैं:
हेडर एक शब्दकोश होना चाहिए, और माना जाएगा के रूप में अगर
add_header()
प्रत्येक कुंजी और मान के रूप में के साथ बुलाया गया था तर्क। इसका उपयोग अक्सरUser-Agent
हेडर को "स्पूफ" करने के लिए किया जाता है, जिसे ब्राउज़र द्वारा स्वयं की पहचान करने के लिए उपयोग किया जाता है - कुछ HTTP सर्वर केवल स्क्रिप्ट के विपरीत सामान्य ब्राउज़र से आने वाले अनुरोधों की अनुमति देते हैं। उदाहरण के लिए, मोज़िला फ़ायरफ़ॉक्स खुद को"Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"
के रूप में पहचान सकता है, जबकिurllib2
की डिफ़ॉल्ट उपयोगकर्ता एजेंट स्ट्रिंग"Python-urllib/2.6"
(पायथन 2.6 पर) है।
Ianswered कुछ हफ्ते पहले similar question।
है कि प्रश्न में उदाहरण कोड नहीं है, लेकिन मूल रूप से आप कुछ इस तरह कर सकते हैं: (। नोट RFC 2616 के रूप में User-Agent
का पूंजीकरण, खंड 14,43)
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()
नामित पैरामीटर के साथ आप इसे दो पंक्तियों में कर सकते हैं। पहली पंक्ति को हटाएं और दूसरे को इसके साथ प्रतिस्थापित करें: 'req = urllib2.Request ('www.example.com', हेडर = {'उपयोगकर्ता-एजेंट': 'मोज़िला/5.0'})'। मैं सिर्फ एक ही अनुरोध करने के लिए इस फॉर्म को पसंद करता हूं। –
इन सभी सिद्धांत में काम करना चाहिए, लेकिन (अजगर 2.7.2 के साथ Windows पर कम से कम) किसी भी समय आप एक कस्टम उपयोगकर्ता-एजेंट हेडर भेजने के लिए, urllib2 कि hea नहीं भेजता है डेर। यदि आप एक उपयोगकर्ता-एजेंट हेडर भेजने का प्रयास नहीं करते हैं, यह डिफ़ॉल्ट अजगर/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')
@ जेकॉन के समाधान ने पाइथन 2.7.2 (लिनक्स) – bparker
'opener.addheaders' पर शायद मेरे लिए काम किया ['' 'उपयोगकर्ता-एजेंट', 'कस्टम उपयोगकर्ता एजेंट')]'। अन्यथा इन सभी विधियों को काम करना चाहिए (मैंने पायथन 2.7.3 (लिनक्स) पर परीक्षण किया है)। आपके मामले में यह तोड़ सकता है क्योंकि आप प्रॉक्सी तर्क गलत का उपयोग करते हैं। – jfs
मेरे लिए build_opener कॉल हेडर में पहले से परिभाषित एक डिफ़ॉल्ट उपयोगकर्ता-एजेंट के साथ रिटर्न देता है। तो संलग्न करने से सिर्फ एक और उपयोगकर्ता-एजेंट हेडर बन जाएगा, जिसे 2 को अनदेखा कर दिया जाएगा। यही कारण है कि @ जकोन का सोल काम कर रहा है। –
अजगर 3 के लिए, urllib 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)
इससे आश्चर्यजनक मदद मिली। मुझे समझ में नहीं आता कि मुझे अनुरोध क्यों चाहिए। अनुरोध करें और फिर urllib.request.urlopen दोहराएं जहां पुराना संस्करण सिर्फ urllib.urlopen (req) ठीक करेगा, लेकिन किसी भी तरह से, यह काम करता है और मुझे पता है कि इसे Python 3 में कैसे उपयोग करें । – jamescampbell
urllib2
में एक अन्य समाधान और अजगर 2.7:
req = urllib2.Request('http://www.example.com/')
req.add_unredirected_header('User-Agent', 'Custom User-Agent')
urllib2.urlopen(req)
मुझे एक पृष्ठ के लिए त्रुटि 404 मिलती है जो मौजूद है यदि यूआरएल मेरे ब्राउजर में प्रवेश करता है – Yebach
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')
ने मुझे बहुत मदद की, धन्यवाद! – Meysam
इस प्रयास करें:
addheaders = [('User-Agent', 'Python-urllib/1.17'), ('Accept', '*/*')]
और
version = 'Python-urllib/1.17'
:
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
प्रश्न स्पष्ट रूप से 'urllib2' पर चर्चा करता है और अन्य मॉड्यूल नहीं। –
वहाँ urllib.URLopener()
अर्थात् के दो गुण हैं।
वेबसाइट को बेवकूफ बनाने के लिए आपको इन दोनों मानों को एक स्वीकृत उपयोगकर्ता-एजेंट में बदलने की आवश्यकता है। उदाहरण के लिए
क्रोम ब्राउज़र: '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>)
सिर्फ एक संपत्ति को बदलने क्योंकि वेबसाइट में एक संदिग्ध अनुरोध के रूप में यह निशान से काम नहीं करता है।
- 1. अजगर urllib2 urlopen प्रतिक्रिया
- 2. urllib.urlopen काम करता है लेकिन urllib2.urlopen
- 3. क्या urllib2.urlopen() कैश सामान है?
- 4. पायथन: urllib2.urlopen कॉल से HTTP शीर्षलेख प्राप्त करें?
- 5. पूर्व पायथन 2.6 संस्करणों में urllib2.urlopen() के लिए टाइमआउट
- 6. urllib2.urlopen() बनाम urllib.urlopen() - urllib2 404 फेंकता है जबकि urllib काम करता है! क्यूं कर?
- 7. urllib2
- 8. urllib2
- 9. urllib2
- 10. urllib2
- 11. बंद करने फ़ाइलों को ठीक से urllib2.urlopen के साथ खुला()
- 12. पायथन: urllib2.urlopen (यूआरएल, डेटा) आपको डेटा को urllib.urlencode() क्यों करना है?
- 13. क्यों पायथन के urllib2.urlopen() सफल स्थिति कोड के लिए बढ़ा है एक HTTPError?
- 14. urllib2.urlopen का उपयोग करते समय मुझे अंतिम रीडायरेक्ट यूआरएल कैसे मिल सकता है?
- 15. urllib2.URLError: यदि मैं चलाने <urlopen त्रुटि [errno 11004] getaddrinfo में विफल रहा है>
- 16. Urllib2 के साथ संभालने के लिए मुझे किन त्रुटियों/अपवादों की आवश्यकता है। अनुरोध/urlopen?
- 17. डेटा तर्क के बिना POST अनुरोध करने के लिए urllib2.urlopen का उपयोग कैसे करें
- 18. urlopen त्रुटि 10045, विंडोज
- 19. urllib2 स्ट्रिंग
- 20. urllib2.URLError
- 21. पाइथन urllib2
- 22. HTTPS urllib2
- 23. पायथन का 'urllib2`: जब मैं विकिपीडिया पृष्ठ' urlopen 'करता हूं तो मुझे त्रुटि 403 क्यों मिलती है?
- 24. बताएँ urllib2 कस्टम DNS
- 25. पायथन urllib2 त्रुटियां
- 26. पायथन - urllib2 और cookielib
- 27. पायथन और urllib2
- 28. urllib2 में कैशिंग?
- 29. पायथन: Urllib2 और OpenCV
- 30. पायथन urllib2: यूआरएल
यह विधि अन्य शीर्षकों के लिए काम करती है, लेकिन उपयोगकर्ता-एजेंट नहीं - कम से कम मेरे 2.6.2 स्थापना में नहीं। कुछ कारणों से उपयोगकर्ता-एजेंट को अनदेखा किया जाता है। – Nathan
मेरा मानना है कि 'उपयोगकर्ता-एजेंट' वास्तव में 'उपयोगकर्ता-एजेंट' होना चाहिए (ए पूंजीकृत है) ऐसा करने पर मेरे लिए काम करना प्रतीत होता है। – KriiV
शीर्षलेख नाम केस-असंवेदनशील हैं। –