【问题标题】:HTTP Error 404: Not Found urllib.request.urlretrieveHTTP 错误 404:未找到 urllib.request.urlretrieve
【发布时间】:2020-08-24 00:45:33
【问题描述】:

不确定为什么链接工作时会发生此错误。当我点击链接时,我被带到了原始数据,但是当我运行代码时,我得到了 404 错误。

import pandas as pd
import os
import tarfile
from six.moves import urllib
DOWNLOAD_ROOT = "https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data" 
TESLA_PATH = os.path.join("datasets", "tesla")
TESLA_URL = DOWNLOAD_ROOT + "datasets/tesla/tesla.tgz"
def fetch_tesla_data(tesla_url=TESLA_URL, tesla_path=TESLA_PATH): 
    if not os.path.isdir(tesla_path):
        os.makedirs(tesla_path)
    tgz_path = os.path.join(tesla_path, "tesla.tgz") 
    urllib.request.urlretrieve(tesla_url, tgz_path) 
    tesla_tgz = tarfile.open(tgz_path) 
    tesla_tgz.extractall(path=tesla_path) 
    tesla_tgz.close()
fetch_tesla_data()

【问题讨论】:

  • “链接有效” 是不正确的。试试print(tesla_url) 看看链接是什么。
  • https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data 有效,但是我能想到的与您那里的各种文本的组合都不起作用。请提供您希望代码运行的完整 URL(确实有效)。
  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)放在有问题的(不是评论)中。还有其他有用的信息。
  • 这是正确的网址。我根据您的反馈更改了代码,但在检索文件时遇到了困难。
  • 这个网址给你原始文本而不是.tgz,你不需要tarfile

标签: python jupyter-notebook urllib


【解决方案1】:

您创建的 URL 错误。 TESLA_URL 是https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_datadatasets/tesla/tesla.tgz

实际网址是https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data

您在 URL 中添加了一些词,使其与原始 URL 不同。

只需将您的代码修改为以下内容

import pandas as pd
import os
import tarfile
from six.moves import urllib 

TESLA_PATH = os.path.join("datasets", "tesla")

# This is what I changed
# I got rid of DOWNLOAD_ROOT and just threw the link in TESLA_URL
TESLA_URL = "https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data"

def fetch_tesla_data(tesla_url=TESLA_URL, tesla_path=TESLA_PATH): 
    if not os.path.isdir(tesla_path):
        os.makedirs(tesla_path)
    tgz_path = os.path.join(tesla_path, "tesla.tgz") 
    urllib.request.urlretrieve(tesla_url, tgz_path) 
    tesla_tgz = tarfile.open(tgz_path) 
    tesla_tgz.extractall(path=tesla_path) 
    tesla_tgz.close()

fetch_tesla_data()

【讨论】:

  • 现在您有了正确的 URL,但它提供的是原始文本而不是 .tgz,因此您无需使用 tarfile 并提取它。
  • 只需将其保存为 .csv。从作者最后一次提交的外观来看,该文件似乎是一个 .csv
  • 我还能如何提取它
  • @IsaiahCruz 你不需要额外的 - 它没有被压缩。你必须按原样写。
  • 感谢所有帮助我弄清楚的人[编辑:我撒谎]
【解决方案2】:

有两个问题

  • 错误的 url - 它只需要 DOWNLOAD_ROOT 而没有 "datasets/tesla/tesla.tgz"

  • 它提供原始文本(不是压缩文件),它不需要tarfileextractall


import os
from six.moves import urllib 

URL = "https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data"
LOCAL_FOLDER = "datasets"  # or "datasets/tesla"
LOCAL_FILENAME = "tesla.csv"
LOCAL_PATH = os.path.join(LOCAL_FOLDER, LOCAL_FILENAME)

os.makedirs(LOCAL_FOLDER, exist_ok=True)
urllib.request.urlretrieve(URL, LOCAL_PATH) 

df = pd.read_csv(LOCAL_PATH)
print(df)

就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2018-02-03
    • 2020-03-20
    相关资源
    最近更新 更多