मैं urlib2.urlopen पर डिफ़ॉल्ट के अलावा एक उपयोगकर्ता एजेंट के साथ एक वेबपेज कैसे डाउनलोड कर सकता हूं?
मैं urlib2.urlopen पर डिफ़ॉल्ट के अलावा एक उपयोगकर्ता एजेंट के साथ एक वेबपेज कैसे डाउनलोड कर सकता हूं?
जवाबों:
पायथन में सभी के पसंदीदा डाइव से यूजर-एजेंट सेट करना ।
लघु कहानी: आप ऐसा करने के लिए Request.add_header का उपयोग कर सकते हैं ।
डॉक्स नोट के रूप में , अनुरोध को बनाते समय आप हेडर को एक शब्दकोश के रूप में भी पारित कर सकते हैं :
हेडर एक शब्दकोश होना चाहिए, और माना जाएगा जैसे कि
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 पर)।
मैं जवाब एक समान प्रश्न एक जोड़ी हफ्ते पहले।
उस प्रश्न में उदाहरण कोड है, लेकिन मूल रूप से आप ऐसा कुछ कर सकते हैं: ( आरएफसी 2616 , धारा 14.43 के User-Agent
रूप में पूंजीकरण पर ध्यान दें )।
opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
response = opener.open('http://www.stackoverflow.com')
User-agent
वास्तव में ऐसा होना चाहिए User-Agent
(ए को पूंजीकृत किया जाता है) ऐसा करने पर मेरे लिए काम करता है।
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', headers={'User-Agent': 'Mozilla/5.0'})
:। मैं सिर्फ एक अनुरोध करने के लिए इस फॉर्म को पसंद करता हूं।
html = urlopen(Request('http://www.example.com', headers={'User-Agent': 'Mozilla/5.0'})).read()
अजगर 3 के लिए, urllib 3 मॉड्यूल में विभाजित है ...
import urllib.request
req = urllib.request.Request(url="http://localhost/", headers={'User-Agent':' Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'})
handler = urllib.request.urlopen(req)
data=b'None'
उत्तर देने वाले भ्रामक पैरामीटर को हटा दिया है । इसने अवैध डेटा के साथ POST के उदाहरण अनुरोध को बदल दिया। संभवतः आपके मामले में विफलता का कारण, @ माकिसिम
इन सभी को सिद्धांत रूप में काम करना चाहिए, लेकिन कम से कम विंडोज पर पायथन 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')
opener.addheaders
शायद होना चाहिए [('User-agent', 'Custom user agent')]
। अन्यथा इन सभी तरीकों से काम करना चाहिए (मैंने पायथन 2.7.3 (लिनक्स) पर परीक्षण किया है)। आपके मामले में यह टूट सकता है क्योंकि आप प्रॉक्सी तर्क का गलत उपयोग करते हैं।
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')
इसे इस्तेमाल करे :
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()
अर्थात्:
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 bot: '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>)
सिर्फ एक संपत्ति बदलने से काम नहीं चलता क्योंकि वेबसाइट इसे एक संदिग्ध अनुरोध के रूप में चिह्नित करती है।