2009-09-26 6 views
6

Ich habe den folgenden einfachen Code:Warum bekomme ich urllib2.HTTPError mit urllib2 und keine Fehler mit urllib?

import urllib2 
import sys 
sys.path.append('../BeautifulSoup/BeautifulSoup-3.1.0.1') 
from BeautifulSoup import * 
page='http://en.wikipedia.org/wiki/Main_Page' 
c=urllib2.urlopen(page) 

Dieser Code erzeugt folgende Fehlermeldungen:

c=urllib2.urlopen(page) 
    File "/usr/lib64/python2.4/urllib2.py", line 130, in urlopen 
    return _opener.open(url, data) 
    File "/usr/lib64/python2.4/urllib2.py", line 364, in open 
    response = meth(req, response) 
    File "/usr/lib64/python2.4/urllib2.py", line 471, in http_response 
    response = self.parent.error(
    File "/usr/lib64/python2.4/urllib2.py", line 402, in error 
    return self._call_chain(*args) 
    File "/usr/lib64/python2.4/urllib2.py", line 337, in _call_chain 
    result = func(*args) 
    File "/usr/lib64/python2.4/urllib2.py", line 480, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 403: Forbidden 

Aber wenn ich durch urllib ersetzen urllib2, erhalte ich keine Fehlermeldungen. Kann jemand dieses Verhalten erklären?

Antwort

10

Das Original urllib löst einfach keine Ausnahme für einen 403-Code. Wenn Sie print c.getcode() bis zur letzten Zeile Ihres Programms hinzufügen, wird urllib es erreichen und drucken noch heraus 403.

Dann, wenn Sie print c.read() am Ende tun, werden Sie sehen, dass Sie in der Tat eine Fehlerseite von Wikipedia erhalten hat. Es ist nur eine Frage von urllib2 zu entscheiden, einen Fehler 403 als eine Laufzeitausnahme zu behandeln, im Gegensatz zu urllib können Sie immer noch einen Fehler 403 erhalten und dann etwas mit der Seite tun.

4

Wikipedia scheint den Standard User-Agent von urllib2 herauszufiltern. Ändere es einfach.

+0

Verbindung nicht mehr besteht – Peter

+1

@Pete und Good Riddance zu erhalten. –

Verwandte Themen