如何从 Kaggle 下载文件并在 python 中处理它
How to download a file from Kaggle and work on it in python
我想从 python 中的 Kaggle 下载一个数据集,然后对其进行处理。当我单击此页面上的下载按钮时说 https://www.kaggle.com/quora/question-pairs-dataset
我的浏览器正在加载一个 zip 文件。但是,如果我在 python
import requests, zipfile, io
r = requests.get("https://www.kaggle.com/quora/question-pairs-dataset/download")
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall(os.getcwd())
我收到错误
Traceback (most recent call last):
File "C:\Users\u\Documents\Maths\Code\Variational Auto Encoders\VAE_text_generation.py", line 33, in <module>
z = zipfile.ZipFile(io.BytesIO(r.content))
File "C:\Users\u\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1257, in __init__
self._RealGetContents()
File "C:\Users\u\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1324, in _RealGetContents
raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file
从 url 获取文件的任何解决方案 - 如果需要解压缩 - 并获取下载文件的名称以便能够对其进行处理?
编辑还测试了以下不会产生错误的文件,但文件不是我期望的 .csv 和 .txt,可能是因为它们尚未解压缩或无法正确上传,因为缺少权限。
from urllib.request import urlretrieve
def report(num, size, total):
print(num*size, '/', total)
# get kaggle data
urlretrieve("https://www.kaggle.com/quora/question-pairs-dataset/download","train.csv",reporthook=report)
TRAIN_DATA_FILE = os.getcwd() + 'train.csv'
## get glove
urlretrieve("https://www.kaggle.com/watts2/glove6b50dtxt/download",
"glove.txt",reporthook=report)
GLOVE_EMBEDDING = os.getcwd() + 'glove.txt'
首先尝试使用response.raw.decode_content = True
像这样:
import requests, zipfile, io
response = requests.get("https://www.kaggle.com/quora/question-pairs-dataset/download")
response.raw.decode_content = True
z = zipfile.ZipFile(io.BytesIO(response.content))
z.extractall(os.getcwd())
zipfile.BadZipFile: File is not a zip file
很明显你得到的不是 ZIP 文件,Content-Type
响应头对于确定你得到的是有用的,我做到了
import requests
r = requests.get("https://www.kaggle.com/quora/question-pairs-dataset/download")
print(r.headers['Content-Type'])
输出
text/html; charset=utf-8
所以这是 HTML 页面,因为 我的浏览器正在加载一个 zip 文件 我怀疑访问这个资源需要登录,否则你会被重定向到页面允许登录。要使基于 requests
的下载工作,您需要了解 Kaggle 是如何完成检查并遵守它的。
我想从 python 中的 Kaggle 下载一个数据集,然后对其进行处理。当我单击此页面上的下载按钮时说 https://www.kaggle.com/quora/question-pairs-dataset
我的浏览器正在加载一个 zip 文件。但是,如果我在 python
import requests, zipfile, io
r = requests.get("https://www.kaggle.com/quora/question-pairs-dataset/download")
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall(os.getcwd())
我收到错误
Traceback (most recent call last):
File "C:\Users\u\Documents\Maths\Code\Variational Auto Encoders\VAE_text_generation.py", line 33, in <module>
z = zipfile.ZipFile(io.BytesIO(r.content))
File "C:\Users\u\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1257, in __init__
self._RealGetContents()
File "C:\Users\u\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1324, in _RealGetContents
raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file
从 url 获取文件的任何解决方案 - 如果需要解压缩 - 并获取下载文件的名称以便能够对其进行处理?
编辑还测试了以下不会产生错误的文件,但文件不是我期望的 .csv 和 .txt,可能是因为它们尚未解压缩或无法正确上传,因为缺少权限。
from urllib.request import urlretrieve
def report(num, size, total):
print(num*size, '/', total)
# get kaggle data
urlretrieve("https://www.kaggle.com/quora/question-pairs-dataset/download","train.csv",reporthook=report)
TRAIN_DATA_FILE = os.getcwd() + 'train.csv'
## get glove
urlretrieve("https://www.kaggle.com/watts2/glove6b50dtxt/download",
"glove.txt",reporthook=report)
GLOVE_EMBEDDING = os.getcwd() + 'glove.txt'
首先尝试使用response.raw.decode_content = True
像这样:
import requests, zipfile, io
response = requests.get("https://www.kaggle.com/quora/question-pairs-dataset/download")
response.raw.decode_content = True
z = zipfile.ZipFile(io.BytesIO(response.content))
z.extractall(os.getcwd())
zipfile.BadZipFile: File is not a zip file
很明显你得到的不是 ZIP 文件,Content-Type
响应头对于确定你得到的是有用的,我做到了
import requests
r = requests.get("https://www.kaggle.com/quora/question-pairs-dataset/download")
print(r.headers['Content-Type'])
输出
text/html; charset=utf-8
所以这是 HTML 页面,因为 我的浏览器正在加载一个 zip 文件 我怀疑访问这个资源需要登录,否则你会被重定向到页面允许登录。要使基于 requests
的下载工作,您需要了解 Kaggle 是如何完成检查并遵守它的。