Ошибка HTTP 404: не найден urllib.request.urlretrieve

#python #jupyter-notebook #urllib

#python #jupyter-ноутбук #urllib

Вопрос:

не уверен, почему возникает эта ошибка, когда ссылка работает. Когда я нажимаю на ссылку, я попадаю к необработанным данным, однако, когда я запускаю код, я получаю ошибку 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()
  

Комментарии:

1. Неверно, что «ссылка работает» . Попробуйте print(tesla_url) и посмотрите, что это за ссылка.

2. https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data работает, но ни одна из комбинаций, которые я мог придумать с различными фрагментами текста, которые у вас там есть, не работает. Пожалуйста, укажите полный URL, по которому, как вы ожидаете, будет отправлен ваш код (и это действительно работает).

3. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Traceback») в вопрос (не комментарий) в виде текста (не скриншота). Есть и другая полезная информация.

4. это правильный URL. Я изменил код на основе вашего отзыва, но я застрял при получении файла.

5. этот URL выдает необработанный текст вместо .tgz и вам не нужно tarfile

Ответ №1:

URL, который вы ввели, был неправильным. TESLA_URL является https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_datadatasets/tesla/tesla.tgz

Фактический URL https://raw.githubusercontent.com/isaiahxcruz/Datasets/master/TSLA_data

Вы добавили несколько слов к 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()
  

Комментарии:

1. теперь у вас есть правильный URL, но он выдает необработанный текст вместо .tgz поэтому вам не нужно использовать tarfile и извлекать его.

2. просто сохраните его как .csv. судя по последнему коммиту, сделанному автором, файл имеет вид .csv

3. как еще я мог бы его извлечь

4. @IsaiahCruz вам не нужно добавлять его — он не сжат. Вы должны написать это как есть.

5. спасибо всем за помощь, я смог разобраться [РЕДАКТИРОВАТЬ: я солгал]

Ответ №2:

Есть две проблемы

  • неправильный URL -ему нужен только DOWNLOAD_ROOT без "datasets/tesla/tesla.tgz"

  • он выдает необработанный текст (не сжатый файл), и ему не нужно tarfile и extractall


 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)
  

Вот и все.