Frage

Ich habe den folgenden einfachen Code:

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 generiert die folgenden 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 Urllib2 durch Urllib ersetze, erhalte ich keine Fehlermeldungen. Kann jemand dieses Verhalten erklären?

War es hilfreich?

Lösung

Das Original urllib Erhöht einfach keine Ausnahme in einem 403 -Code. Wenn Sie hinzufügen print c.getcode() bis zur letzten Zeile Ihres Programms, urllib wird es erreichen und trotzdem 403 ausdrucken.

Dann, wenn du es tust print c.read() Am Ende werden Sie sehen, dass Sie tatsächlich eine Fehlerseite von Wikipedia erhalten haben. Es ist nur eine Frage von urllib2 Entscheidung, einen Fehler 403 als Laufzeitausnahme zu behandeln, gegenüber dem Vergleich urllib Ermöglichen Sie, dass Sie noch einen Fehler 403 erhalten und dann etwas mit der Seite tun.

Andere Tipps

Wikipedia scheint die Standardbenutzer-Agent von Urllib2 herauszufiltern. Ändern Sie es einfach.

Übergeordnete urllib2.htttperror oder urllib.error.htttperror und reading reaktion html sowieso Dieser Beitrag zeigt eine gute Möglichkeit, eine detaillierte Fehlermeldung vom Server zu erhalten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top