2016-10-18 2 views
0

Ich versuchte http://www.crummy.com/software/BeautifulSoup/urllib.request.urlopen() URLError

## all imports 
from IPython.display import HTML 
import numpy as np 
import urllib.request, urllib.error 
import bs4 #this is beautiful soup 
import time 
import operator 
import socket 
import pickle 
import re # regular expressions 

from pandas import Series 
import pandas as pd 
from pandas import DataFrame 

import matplotlib 
import matplotlib.pyplot as plt 
%matplotlib inline 

import seaborn as sns 
sns.set_context("talk") 
sns.set_style("white") 

from secret import *  
url = 'http://www.crummy.com/software/BeautifulSoup/' 
source = urllib.request.urlopen(url).read() 
print(source) 

zu öffnen, aber es einen Fehler zurückgegeben, ich habe um gesucht, aber konnte keine Lösung finden. Es funktionierte für andere Seiten.

SSLEOFError        Traceback (most recent call last) 
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py in do_open(self, http_class, req, **http_conn_args) 
    1253    try: 
-> 1254     h.request(req.get_method(), req.selector, req.data, headers) 
    1255    except OSError as err: # timeout error 

/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py in do_open(self, http_class, req, **http_conn_args) 
    1254     h.request(req.get_method(), req.selector, req.data, headers) 
    1255    except OSError as err: # timeout error 
-> 1256     raise URLError(err) 
    1257    r = h.getresponse() 
    1258   except: 

URLError: <urlopen error EOF occurred in violation of protocol (_ssl.c:645)> 

Danke,

Antwort

0

Die Tatsache, dass die Website http://www.crummy.com/software/BeautifulSoup/ auf https umgeleitet SSL auf Besuch erklärt, warum mit SSL etwas falsch gibt. Die SSLEOFError bedeutet, dass die zugrunde liegende SSL-Verbindung abrupt beendet wurde. Aufgrund der Tatsache, dass es in der Tat funktioniert für mich, sind Sie sicher, dass Ihr Netzwerk wie vorgesehen funktioniert? Sie befinden sich möglicherweise hinter einer Art Proxy, der Probleme mit SSL verursacht oder keine SSL-Verbindungen zulässt (z. B. aufgrund eines fehlenden Stammzertifikats, das es dem Proxy ermöglicht, die Verbindungen abzufangen).

Sie könnten auch versuchen, Zertifikate zu ignorieren, indem Sie eine benutzerdefinierte SSL-Kontext hinzugefügt (Python> = 2.7.9/3.4.3):

import ssl 

context = ssl.create_default_context() 
context.check_hostname = False 
context.verify_mode = ssl.CERT_NONE 

urllib.requests.urlopen("https://the.url/path", context=context).read() # ... 

Aber ich bin nicht sicher, ob das Ihr Problem löst weil der Fehler möglicherweise schon vor der Überprüfung von Zertifikaten auftritt (z. B. wenn ein potenzieller Proxy nur SSL-Verbindungen abbricht).

Seitennotiz/Empfehlung: Es gibt auch ein nettes anderes Python-Modul namens requests, das HTTP-Anfragen noch einfacher macht.

+0

Ich habe versucht, andere Websites wie "http: // python.org", es hat funktioniert. – paulmassimo

+0

Ich habe Ihren Weg versucht, es kam mit einem anderen Fehler 'gaierror Traceback (zuletzt letzten Aufruf) /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py in do_open (selbst, http_class, erf, ** http_conn_args) 1253 try: -> 1254 h.request (req.get_method(), req.selector, req.data, headers) URLError: ' – paulmassimo

+0

Mir scheint es, dass es etwas" falsch "mit Ihrem zugrunde liegenden System ist. Sind Sie sicher, dass Sie nicht hinter einer Art von Proxy stehen und Ihr Betriebssystem einwandfrei funktioniert? Jemand anders könnte einen anderen Vorschlag haben. (Ich habe sowohl Ihre als auch meine Lösung auf der URL getestet, die Sie in Ihrer Frage angegeben haben, und es funktionierte beide Male gut.) – mxscho

Verwandte Themen