如何按点击量对UCI机器学习平台的数据集进行排序
UCI数据集按点击量排序解决方案
官方功能说明
旧版UCI机器学习站点仅在首页展示访问量最高的12个数据集,全量数据集浏览页未提供公开的排序功能;新版beta站点的排序筛选仅统计新站点本身的访问数据,无法覆盖旧站累计的历史访问量,暂无官方直接支持全量数据集按历史点击量排序的入口。
抓取实现方案
你之前抓取分类数据集时出现内存错误,是因为分类数据集总量远大于回归数据集,单页加载全量内容占用资源过高导致。改用分页增量抓取的逻辑,逐页解析数据避免一次性加载全量页面内容,即可解决内存报错问题。
依赖安装
执行脚本前先安装依赖库:pip install requests beautifulsoup4
可用脚本
import requests from bs4 import BeautifulSoup import time def get_uci_datasets(task_type, top_n=20): base_url = "https://archive.ics.uci.edu/ml/datasets.php" params = { "task": task_type, "format": "list", "sort": "name", "dir": "ASC" } datasets = [] page = 0 while True: params["page"] = page resp = requests.get(base_url, params=params, timeout=10) resp.encoding = "utf-8" soup = BeautifulSoup(resp.text, "html.parser") # 解析当前页数据集行,跳过表头 rows = soup.select("table.normal tr")[1:] if not rows: break for row in rows: cols = row.select("td") if len(cols) < 5: continue name = cols[0].text.strip() views = int(cols[4].text.strip()) if cols[4].text.strip().isdigit() else 0 datasets.append({"name": name, "views": views}) page += 1 time.sleep(1) # 增加请求间隔避免触发站点反爬限制 # 按浏览量降序排序 datasets_sorted = sorted(datasets, key=lambda x: x["views"], reverse=True) return datasets_sorted[:top_n] if __name__ == "__main__": # task_type可选值:regression(回归)、classification(分类) # 可自行修改top_n参数调整输出的热门数据集数量 top_classification = get_uci_datasets("classification", top_n=20) print("分类任务热门数据集TOP20:") for idx, item in enumerate(top_classification, 1): print(f"{idx}. {item['name']} - 浏览量:{item['views']}") top_regression = get_uci_datasets("regression", top_n=20) print("\n回归任务热门数据集TOP20:") for idx, item in enumerate(top_regression, 1): print(f"{idx}. {item['name']} - 浏览量:{item['views']}")
使用说明
- 脚本支持分别抓取回归、分类两种任务类型的数据集
- 抓取完成后自动按旧站历史点击量从高到低排序,可通过修改
top_n参数调整输出的数据集数量 - 内置1秒的请求间隔,避免请求频率过高被站点限制访问
内容的提问来源于stack exchange,提问作者akkh
相关产品推荐
相关产品推荐

