सवाल पायथन का 'urllib2`: जब मैं विकिपीडिया पृष्ठ' urlopen 'करता हूं तो मुझे त्रुटि 403 क्यों मिलती है?


कोशिश करते समय मुझे एक अजीब बग है urlopen विकिपीडिया से एक निश्चित पृष्ठ। यह पृष्ठ है:

http://en.wikipedia.org/wiki/OpenCola_(drink)

यह शेल सत्र है:

>>> f = urllib2.urlopen('http://en.wikipedia.org/wiki/OpenCola_(drink)')
Traceback (most recent call last):
  File "C:\Program Files\Wing IDE 4.0\src\debug\tserver\_sandbox.py", line 1, in <module>
    # Used internally for debug sandbox under external interpreter
  File "c:\Python26\Lib\urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "c:\Python26\Lib\urllib2.py", line 397, in open
    response = meth(req, response)
  File "c:\Python26\Lib\urllib2.py", line 510, in http_response
    'http', request, response, code, msg, hdrs)
  File "c:\Python26\Lib\urllib2.py", line 435, in error
    return self._call_chain(*args)
  File "c:\Python26\Lib\urllib2.py", line 369, in _call_chain
    result = func(*args)
  File "c:\Python26\Lib\urllib2.py", line 518, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden

यह मेरे साथ विभिन्न महाद्वीपों में दो अलग-अलग प्रणालियों पर हुआ। क्या किसी को पता है कि ऐसा क्यों होता है?


44
2017-07-26 15:53


मूल


आप उन कोष्ठक को यूआरएल-एन्कोड करना चाहते हैं। यह नहीं कि यह 403 के खिलाफ मदद करता है, हालांकि। - Thomas
आप विकीमीडिया एपीआई से लिंक का भी उपयोग कर सकते हैं mediawiki.org/wiki/API:Main_page - chackerian


जवाब:


विकिपीडिया का रुख है:

डेटा पुनर्प्राप्ति: बॉट्स का उपयोग नहीं किया जा सकता है   किसी भी उपयोग के लिए थोक सामग्री पुनर्प्राप्त करने के लिए   सीधे अनुमोदित से संबंधित नहीं है   बॉट कार्य इसमें गतिशील रूप से शामिल है   किसी अन्य वेबसाइट से पृष्ठों को लोड करना,   जिसके परिणामस्वरूप वेबसाइट हो सकती है   काली सूचीबद्ध और स्थायी रूप से मना कर दिया   पहुंच। अगर आप डाउनलोड करना चाहते हैं   थोक सामग्री या एक परियोजना दर्पण,   कृपया डाउनलोड या होस्टिंग करके ऐसा करें   हमारे डेटाबेस की अपनी प्रति।

यही कारण है कि पायथन अवरुद्ध है। आपको माना जाता है डेटा डंप डाउनलोड करें

वैसे भी, आप Python 2 में इस तरह के पेज पढ़ सकते हैं:

req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) 
con = urllib2.urlopen( req )
print con.read()

या पायथन 3 में:

import urllib
req = urllib.request.Request(url, headers={'User-Agent' : "Magic Browser"}) 
con = urllib.request.urlopen( req )
print con.read()

106
2017-07-26 16:15



"यही कारण है कि पाइथन अवरुद्ध है।" मुझे यह नहीं मिलता कि यह वाक्य क्या है? हालांकि, यहां तक ​​कि मैंने 'उपयोगकर्ता-एजेंट' की एक सूची भी बनाई है और एक यूआरएल बनाने के लिए यादृच्छिक रूप से उनमें से एक का चयन किया है, वेबसाइट मुझे "urllib2.URLError: <urlopen त्रुटि [Errno 10060]>" भेजा जाएगा या बस मेरे आईपी को देखने से अवरुद्ध कर दिया है उनकी वेबसाइट क्या आप मुझे और विचार दे सकते हैं? बहुत धन्यवाद। - MaiTiano
यह पूरी तरह हास्यास्पद है कि वे भी ब्लॉक करते हैं HEAD अनुरोध जो उपयोगी हैं उदा। किसी उपयोगकर्ता द्वारा पोस्ट किए गए सभी लिंक को सत्यापित करने के लिए। - ThiefMaster♦
यह दृष्टिकोण मेरे लिए एक HTTPS पृष्ठ के लिए भी काम करता है जो मुझे 403 लौटा रहा है। यह क्यों काम करता है, जबकि urllib2.urlopen() 403 में परिणाम? - Pyderman
इसके अलावा, अगर आपको एपीआई के साथ काम करते समय त्रुटि 403 मिल रही है तो आपको ऊपर वर्णित समाधान का उपयोग करना चाहिए - Luis Cabrera Benito


इसे डीबग करने के लिए, आपको उस अपवाद को फंसाना होगा।

try:
    f = urllib2.urlopen('http://en.wikipedia.org/wiki/OpenCola_(drink)')
except urllib2.HTTPError, e:
    print e.fp.read()

जब मैं परिणामस्वरूप संदेश मुद्रित करता हूं, तो इसमें निम्नलिखित शामिल होते हैं

"अंग्रेज़ी

हमारे सर्वर वर्तमान में अनुभव कर रहे हैं   एक तकनीकी समस्या है। यह शायद है   अस्थायी और जल्द ही तय किया जाना चाहिए।   कृपया कुछ देर बाद दुबारा कोशिश करे। "


10
2017-07-26 16:05





अक्सर बार-बार वेबसाइटों को यह जांच कर फ़िल्टर किया जाएगा कि उन्हें किसी मान्यता प्राप्त उपयोगकर्ता एजेंट द्वारा एक्सेस किया जा रहा है या नहीं। विकिपीडिया सिर्फ आपकी लिपि को बॉट के रूप में देख रहा है और इसे अस्वीकार कर रहा है। ब्राउज़र के रूप में स्पूफिंग करने का प्रयास करें। आपको यह दिखाने के लिए निम्न लिंक आपको एक लेख लेता है।

http://wolfprojects.altervista.org/changeua.php


5
2017-07-26 16:03





कुछ वेबसाइट स्क्रिप्ट से एक्सेस को अवरुद्ध कर सकती हैं ताकि हेडर urllib भेजकर अपने सर्वर के 'अनावश्यक' उपयोग से बच सकें। मुझे नहीं पता और कल्पना नहीं कर सकता कि विकिपीडिया ऐसा क्यों करता / करती है, लेकिन क्या आपने अपने हेडर को धोखा देने की कोशिश की है?


1
2017-07-26 16:01



meta.wikimedia.org/wiki/Bot_policy - Thomas Wouters


जैसा कि जोचन रिट्जेल ने उल्लेख किया था, विकिपीडिया बॉट ब्लॉक करता है।

हालांकि, अगर वे PHP एपीआई का उपयोग करते हैं तो बॉट अवरुद्ध नहीं होंगे। "प्यार" नामक विकिपीडिया पृष्ठ प्राप्त करने के लिए:

http://en.wikipedia.org/w/api.php?format=json&action=query&titles=love&prop=revisions&rvprop=content


1
2017-08-24 07:01





मैंने php का उपयोग करके इसके लिए एक समाधान किया है जिसकी मुझे आवश्यकता है साइट द्वारा अवरुद्ध नहीं किया गया है।

इसे इस तरह से पहुंचा जा सकता है:

path='http://phillippowers.com/redirects/get.php? 
file=http://website_you_need_to_load.com'
req = urllib2.Request(path)
response = urllib2.urlopen(req)
vdata = response.read()

यह आपको एचटीएमएल कोड वापस कर देगा


0
2017-12-18 18:38