我的Python无法使用URL';s、 没人知道为什么?
我只想从网站上搜集一些关于地震的数据。事实上,我只希望Python能够从URL中提取数据。出于某种原因,即使是只打开url并使用“.readlines()”的最简单代码也会遇到大量错误。它似乎不理解“openurl”命令,也不理解大多数其他命令 我甚至不知道该尝试什么,因为我无法解析它给我的错误。在我不得不做一些激烈的事情,比如重新下载python或其他什么之前,我希望有人能给我一个答案我的Python无法使用URL';s、 没人知道为什么?,python,python-3.x,http,url,Python,Python 3.x,Http,Url,我只想从网站上搜集一些关于地震的数据。事实上,我只希望Python能够从URL中提取数据。出于某种原因,即使是只打开url并使用“.readlines()”的最简单代码也会遇到大量错误。它似乎不理解“openurl”命令,也不理解大多数其他命令 我甚至不知道该尝试什么,因为我无法解析它给我的错误。在我不得不做一些激烈的事情,比如重新下载python或其他什么之前,我希望有人能给我一个答案 import urllib.request def urltest(): url = "http://e
import urllib.request
def urltest():
url = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.csv"
f = urllib.request.urlopen(url)
allLines = f.readlines()
f.close()
line = allLines[0].decode()
print(line)
这是我用来简单测试它的代码。该URL指向一个包含.csv文件的网站,python应该很容易获取并读取该文件
如果有人愿意,我实际上可以发布这段代码返回的整个错误墙。看起来至少有6个不同的,但这是最后一行:
urllib.error.URLError: <urlopen error unknown url type: https>
urllib.error.URLError:
问题似乎是网络(dns/代理/防火墙)问题。
您可以使用熊猫:
import pandas as pd
data = pd.read_csv('http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.csv')
print (data)
查看urllib.requests模块,它将加载一组处理程序。我们可以在urllib.request.py中看到此代码段
if hasattr(http.client, "HTTPSConnection"):
default_classes.append(HTTPSHandler)
skip = set()
for klass in default_classes:
for check in handlers:
if isinstance(check, type):
if issubclass(check, klass):
skip.add(klass)
elif isinstance(check, klass):
skip.add(klass)
for klass in skip:
default_classes.remove(klass)
for klass in default_classes:
opener.add_handler(klass())
因此,仅当http.client.py具有属性HTTPSConnection
时,才会加载https处理程序类。如果查看http.client.py,我们可以看到以下设置此属性的代码
try:
import ssl
except ImportError:
pass
else:
class HTTPSConnection(HTTPConnection):
"This class allows communication via SSL."
default_port = HTTPS_PORT
因此,只有当ssl
模块能够成功导入时,才会创建HTTPSConnection
类。如果您的系统没有ssl
模块,那么http.client
将不会加载HTTPSConnection
类,而该类又不会添加属性,因此urllib
不会加载https
的处理程序
而你提供的代码在我的系统上工作。我在它之前添加了以下代码,以使我的系统无法定位ssl
模块
#load then remove the ssl module from the system
import sys
import ssl
del ssl
sys.modules['ssl']=None
import urllib.request
def urltest():
url = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.csv"
f = urllib.request.urlopen(url)
allLines = f.readlines()
f.close()
line = allLines[0].decode()
print(line)
urltest()
这样做,我会得到和你一样的错误
C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\python.exe C:/Users/cd00119621/PycharmProjects/ideas/stackoverflow.py
Traceback (most recent call last):
File "C:/Users/cd00119621/PycharmProjects/ideas/stackoverflow.py", line 19, in <module>
urltest()
File "C:/Users/cd00119621/PycharmProjects/ideas/stackoverflow.py", line 13, in urltest
f = urllib.request.urlopen(url)
File "C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 531, in open
response = meth(req, response)
File "C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 641, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 563, in error
result = self._call_chain(*args)
File "C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 503, in _call_chain
result = func(*args)
File "C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 755, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 525, in open
response = self._open(req, data)
File "C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 548, in _open
'unknown_open', req)
File "C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 503, in _call_chain
result = func(*args)
File "C:\Users\cd00119621\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1387, in unknown_open
raise URLError('unknown url type: %s' % type)
urllib.error.URLError: <urlopen error unknown url type: https>
那这就是你问题的原因。您必须重新安装配置了ssl的python,或者以某种方式从源代码构建ssl模块。在
def urltest():
之后的部分是否意味着缩进?您的代码对我来说运行良好……您在这里尝试过解决方案吗:?还要注意:您是如何安装Python的?你能提供更多的信息吗?操作系统、Python版本ETC对于您的Python控制台,您是否能够成功运行import ssl
,这会遇到相同的问题,因为pandas调用urllib,用户无法使用urllib。这并不能回答问题。无论如何,pandas最终会调用urllib,所以无论如何都可能失败。虽然这并没有解决我的问题,但你的评论实际上让我去查找pandas。以前从没见过。所以,至少要感谢您,因为现在数据分析实际上可以在我的机器上进行了!你说得对。我的python安装在Anaconda的某个子目录中,这是我在自学python时使用的。然而,我的CS老师使用IDLE(在mac电脑上,如果你相信的话),因此我被迫制作了几乎是弗兰肯斯坦的怪物版python,这样他的文件就可以在正确的目录中查找。现在,我只需要想一想如何重新安装python,而不会弄乱我要做的事情。编辑:针对我自己的阴谋甚至更深,因为当我使用anaconda识别的文本编辑器运行它时,它实际上工作得很好。
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'ssl'