2017-05-15 3 views
1

Ich versuche, eine Seite und urlopen hängt zu holen und nie etwas zurückgibt, obwohl die Webseite ist sehr leicht und kann ohne ProblemePython urllib mit bestimmten URL friert

import urllib.request 
with urllib.request.urlopen("http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Lei/L11882.htm") as response: 
    print(response.read()) 

Diese einfache mit jedem Browser geöffnet werden Code friert nur beim Abrufen der Antwort ein, aber wenn Sie versuchen, http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Lei/L11882.htm zu öffnen, wird es ohne Probleme geöffnet

+0

Eine Option wäre, wireshark zu verwenden, um den Unterschied zwischen Ihrer Python-Anfrage und der Anfrage Ihres Browsers zu sehen. – RPGillespie

+0

Eine zweite Möglichkeit besteht darin, ein anderes Befehlszeilentool auszuprobieren. Kannst du mit 'curl' oder' wget' abholen? Wenn nicht, weist dies auf ein Umgebungsproblem hin, wie z. B. Proxy-Einstellungen. – RPGillespie

+0

Eine dritte Möglichkeit besteht darin, eine Alternative zu "urllib" wie [requests] (http://docs.python-requests.org/en/master/) zu versuchen Ich empfehle als langjähriger Python-Benutzer, btw) – RPGillespie

Antwort

0

www.planalto.gov.br verwendet User-Agent-Erkennung. Wenn Sie einen gültigen Benutzeragenten angeben, wird die Anforderung korrekt erfüllt. Die Urllib-Bibliothek ist nicht abgestürzt, sie wartet nur.

curl -H "User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Lei/L11882.htm 

arbeitete für mich ganz gut, aber

curl http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Lei/L11882.htm 

nicht.

Wie oben erwähnt, verwenden Sie urllib2 oder Anfragen, um den User-Agent-Header hinzuzufügen (siehe How do I set headers using python's urllib? für weitere Informationen dazu).