无法通过Python代码下载20 Newsgroups数据集,如何使用手动下载文件?
解决20 Newsgroups分类演示的网络超时问题
我最近在跑基于20 Newsgroups的文本分类演示,从scikit-learn官方示例页面下载了代码文件,用Python 3.6 + Anaconda 5.0.1运行时,碰到了网络连接超时错误。有意思的是,我手动访问数据文件的链接完全能正常下载,这就让我犯了难——能不能直接用手动下载好的数据来跑代码呢?
当然可以用本地手动下载的数据!
scikit-learn的fetch_20newsgroups函数其实支持指定本地数据路径,不需要再从网络拉取,具体操作步骤如下:
1. 确认本地文件位置
你已经下载了20news-bydate.tar.gz文件,把它放到一个你容易找到的目录下,比如./local_data/20news-bydate.tar.gz。
2. 修改代码中的数据加载逻辑
找到代码里调用fetch_20newsgroups的代码块,添加两个关键参数:
data_home:指定你存放下载文件的目录路径download_if_missing=False:告诉函数不要尝试从网络下载,直接用本地文件
修改后的代码示例:
from sklearn.datasets import fetch_20newsgroups # 替换成你实际存放文件的目录 local_data_path = "./local_data" # 加载训练集 newsgroups_train = fetch_20newsgroups( subset='train', data_home=local_data_path, download_if_missing=False, # 保留你原来的其他参数,比如categories、remove等 ) # 加载测试集 newsgroups_test = fetch_20newsgroups( subset='test', data_home=local_data_path, download_if_missing=False, # 保留你原来的其他参数 )
小贴士:不需要手动解压
tar.gz文件,scikit-learn会自动在data_home指定的目录下完成解压操作。
3. 验证加载结果
运行修改后的代码,如果没有抛出错误,并且能正常获取到newsgroups_train.data和newsgroups_test.data,就说明本地数据已经成功加载了。
关于超时问题的小排查
如果好奇为什么代码下载超时但手动能正常下载,可能是这几个原因:
- 你手动下载时用了代理,但代码的请求没有配置代理
- scikit-learn默认的下载源在你的网络环境下访问不稳定,而你手动用的是镜像源
- 代码内置的下载超时时间较短,浏览器会自动重试但代码不会
内容的提问来源于stack exchange,提问作者crazyseabiscuit
相关产品推荐
相关产品推荐

