Wie kann ich diesen IOError beheben: [Errno Socket-Fehler] [Errno 11004]?

Diese einfache Python 3 Skript:

import urllib.request host = "scholar.google.com" link = "/scholar.bib?q=info:K7uZdMSvdQ0J:scholar.google.com/&output=citation&hl=en&as_sdt=1,14&ct=citation&cd=0" url = "http://" + host + link filename = "cite0.bib" print(url) urllib.request.urlretrieve("http://scholar.google.com" + url, filename) 

Hebt diese Ausnahme an:

 Traceback (most recent call last): File "C:/Users/ricardo/Desktop/Google-Scholar/BibTex/test2.py", line 8, in <module> urllib.request.urlretrieve("http://scholar.google.com" + url, filename) File "C:\Python32\lib\urllib\request.py", line 150, in urlretrieve return _urlopener.retrieve(url, filename, reporthook, data) File "C:\Python32\lib\urllib\request.py", line 1569, in retrieve fp = self.open(url, data) File "C:\Python32\lib\urllib\request.py", line 1541, in open raise IOError('socket error', msg).with_traceback(sys.exc_info()[2]) File "C:\Python32\lib\urllib\request.py", line 1537, in open return getattr(self, name)(url) File "C:\Python32\lib\urllib\request.py", line 1715, in open_http return self._open_generic_http(http.client.HTTPConnection, url, data) File "C:\Python32\lib\urllib\request.py", line 1695, in _open_generic_http http_conn.request("GET", selector, headers=headers) File "C:\Python32\lib\http\client.py", line 967, in request self._send_request(method, url, body, headers) File "C:\Python32\lib\http\client.py", line 1005, in _send_request self.endheaders(body) File "C:\Python32\lib\http\client.py", line 963, in endheaders self._send_output(message_body) File "C:\Python32\lib\http\client.py", line 808, in _send_output self.send(msg) File "C:\Python32\lib\http\client.py", line 746, in send self.connect() File "C:\Python32\lib\http\client.py", line 724, in connect self.timeout, self.source_address) File "C:\Python32\lib\socket.py", line 386, in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): IOError: [Errno socket error] [Errno 11004] getaddrinfo failed 

Ich kann die URL öffnen, die sich aus der print ergibt:

Http://scholar.google.com/scholar.bib?q=info:K7uZdMSvdQ0J:scholar.google.com/&output=citation&hl=de&as_sdt=1,14&ct=citation&cd=0

Was verursacht das? Ich habe versucht, http:// zu http:/// (drei Schrägstriche) zu wechseln, aber die gleiche Ausnahme wird angehoben.

  • Wie kann ich POST-Anfrage senden?
  • Holen Sie sich die Größe einer Datei, bevor Sie in Python herunterladen
  • Machen Sie eine http-POST-Anfrage zum Hochladen einer Datei mit python urllib / urllib2
  • Python requests ist langsam
  • So speichern Sie "komplette Webseite" nicht nur grundlegende HTML mit Python
  • Python: Urllib.urlopen nonnumeric Port
  • Verwenden von urllib und minidom, um XML-Daten abzurufen
  • Beschleunigen urlib.urlretrieve
  • One Solution collect form web for “Wie kann ich diesen IOError beheben: [Errno Socket-Fehler] [Errno 11004]?”

    Hier ist dein Problem:

     urllib.request.urlretrieve("http://scholar.google.com" + url, filename) 

    Sie fügen den http://scholar.google.com Teil zweimal hinzu (die url startet bereits http://scholar.google.com ). Deshalb urillib denkt, du urillib eine Seite auf scholar.google.comhttp – unnötig zu sagen, diese Domain existiert nicht. Welches ist genau das, was dein Fehler sagt.

    Bitte einfach die url anfordern.

    Handlicher Hinweis, um diese Art von Dingen schneller in der Zukunft zu finden: Beim Hinzufügen einer print zum Debuggen, achten Sie darauf, den tatsächlichen Wert zu drucken, den Sie in dem Befehl verwenden, den Sie debuggen. Sie hätten dies in etwa zwei Sekunden gefunden, wenn Ihre print auch die Basis-URL verkettet hatte.

    Python ist die beste Programmiersprache der Welt.