2009-12-22 20 views
16
import urllib 

print urllib.urlopen('http://www.reefgeek.com/equipment/Controllers_&_Monitors/Neptune_Systems_AquaController/Apex_Controller_&_Accessories/').read() 

ऊपर स्क्रिप्ट काम करता है और उम्मीद परिणाम देता है, जबकि:urllib2.urlopen() बनाम urllib.urlopen() - urllib2 404 फेंकता है जबकि urllib काम करता है! क्यूं कर?

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.5/urllib2.py", line 124, in urlopen 
    return _opener.open(url, data) 
    File "/usr/lib/python2.5/urllib2.py", line 387, in open 
    response = meth(req, response) 
    File "/usr/lib/python2.5/urllib2.py", line 498, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/usr/lib/python2.5/urllib2.py", line 425, in error 
    return self._call_chain(*args) 
    File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain 
    result = func(*args) 
    File "/usr/lib/python2.5/urllib2.py", line 506, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 404: Not Found 

क्या किसी को पता है कि क्यों यह है:

import urllib2 

print urllib2.urlopen('http://www.reefgeek.com/equipment/Controllers_&_Monitors/Neptune_Systems_AquaController/Apex_Controller_&_Accessories/').read() 

निम्न त्रुटि फेंकता है? मैं लैपटॉप से ​​अपने घर नेटवर्क पर कोई प्रॉक्सी सेटिंग्स नहीं चला रहा हूं - बस सीधे अपने लैपटॉप से ​​राउटर तक www तक।

उत्तर

35

वह यूआरएल वास्तव में 404 में परिणाम देता है, लेकिन बहुत सी एचटीएमएल सामग्री के साथ। urllib2 इसे एक त्रुटि स्थिति के रूप में (सही ढंग से) संभाल रहा है। आप उस साइट के 404 पेज की सामग्री को पुनर्प्राप्त कर सकते हैं जैसे:

import urllib2 
try: 
    print urllib2.urlopen('http://www.reefgeek.com/equipment/Controllers_&_Monitors/Neptune_Systems_AquaController/Apex_Controller_&_Accessories/').read() 
except urllib2.HTTPError, e: 
    print e.code 
    print e.msg 
    print e.headers 
    print e.fp.read() 
+2

जो जानना अच्छा है - जिज्ञासा से, जब मैं अपने ब्राउज़र में यह यूआरएल टाइप करता हूं, तो यह भी काम करता है। क्या इसका मतलब यह है कि ब्राउजर को 404 भी मिल रहा है लेकिन यूआरएलआईबी जैसी सामग्री प्रदर्शित करना है? –

+1

@ जेरी हां, यही इसका मतलब है। आप इसे फ़ायरबग या सफारी/क्रोम के वेब इंस्पेक्टर के साथ सत्यापित कर सकते हैं। –

+0

मेरे पास फायरबग है और मैंने इसे चेक किया था, लेकिन मुझे कुछ भी नहीं देखा जो 404 इंगित करता है - क्या आपको कुछ खास करना है? morbid जिज्ञासा से, ब्राउज़र ऐसे खराब मानकों को क्यों सहन करते हैं? क्यों न केवल संकेत मिलता है कि यह फ़ाइल नहीं ढूंढ सका? क्या यह कुछ प्रकार की चाल है जो साइट को बॉट्स को विफल करने के लिए उपयोग कर रही है - सामग्री के साथ 404 लौटाएं यह जानकर कि ब्राउज़र सामग्री प्रदर्शित करेगा और अधिकतर बॉट आगे बढ़ेंगे? –

संबंधित मुद्दे