2016-10-18 4 views
0

Я попытался открыть 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) 

Но это возвратило ошибка, я искал вокруг, но не смогли найти какое-либо решение. Он работал на других сайтах.

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)> 

Спасибо,

ответ

0

Тот факт, что сайт http://www.crummy.com/software/BeautifulSoup/ перенаправляет HTTPS с использованием SSL на посещение объясняет, почему что-то не так с SSL. Значение SSLEOFError означает, что произошло резкое прекращение базового SSL-соединения. Из-за того, что он действительно отлично работает для меня, вы уверены, что ваша сеть работает по назначению? Возможно, вы сидите за прокси-сервером, который дает вам проблемы с SSL или не разрешает SSL-соединения (например, из-за отсутствия корневого сертификата, позволяющего прокси-серверу перехватывать соединения).

Вы могли бы также попытаться игнорировать сертификаты, добавив контекст пользовательского SSL (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() # ... 

Однако, я не уверен, если это решит вашу проблему потому что ошибка может произойти еще до проверки сертификатов (например, в случае, когда потенциальный прокси-сервер просто прерывает соединения SSL).

Сторона примечания/рекомендации: Существует также хороший другой модуль Python, называемый requests, который упрощает HTTP-запросы.

+0

Я пробовал другие сайты, такие как 'http: // python.org', он работал нормально. – paulmassimo

+0

Я пробовал свой путь, он придумал еще одну ошибку 'gaierror Traceback (последний последний вызов) /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/urllib/request.py в do_open (self, http_class, REQ, ** http_conn_args) 1253 попытка: -> 1254 h.request (req.get_method(), req.selector, req.data, заголовки) URLError: ' – paulmassimo

+0

Мне кажется, что есть что-то« неправильное »с вашей базовой системой. Вы уверены, что не находитесь за каким-то прокси-сервером, и ваша ОС отлично работает в сети? У кого-то еще может быть другое предложение. (Я тестировал ваше и мое решение по URL-адресу, который вы указали в своем вопросе, и он работал нормально оба раза.) – mxscho

Смежные вопросы