Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的Python无法使用URL';s、 没人知道为什么?_Python_Python 3.x_Http_Url - Fatal编程技术网

我的Python无法使用URL';s、 没人知道为什么?

我的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

我只想从网站上搜集一些关于地震的数据。事实上,我只希望Python能够从URL中提取数据。出于某种原因,即使是只打开url并使用“.readlines()”的最简单代码也会遇到大量错误。它似乎不理解“openurl”命令,也不理解大多数其他命令

我甚至不知道该尝试什么,因为我无法解析它给我的错误。在我不得不做一些激烈的事情,比如重新下载python或其他什么之前,我希望有人能给我一个答案

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'