You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的Beautiful Soup、Selenium或Scrapy爬取Kaggle数据集名称?

我来帮你解决这个问题~你之前的代码没返回结果主要有两个原因:一是Kaggle页面很多内容是通过JavaScript动态渲染的,用requests.get()只能拿到静态HTML,可能根本没有你要找的那个元素;二是你用的class是React生成的动态类名,每次页面加载这些类名都可能变化,完全不可靠。下面给你几种可行的解决方案:

1. 改进BeautifulSoup方法(适配静态可抓取场景)

优先选择页面中固定不变的标识(比如meta标签、固定的测试ID)来定位元素,同时模拟浏览器请求头避免被反爬:

from bs4 import BeautifulSoup
import requests

url = 'https://www.kaggle.com/heptapod/titanic'
# 模拟浏览器请求头,避免被Kaggle拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.content, 'html.parser')

# 方法1:从页面meta标签获取数据集名称(最稳定的静态方式)
meta_title = soup.find('meta', property='og:title')
if meta_title:
    print("从meta标签获取的名称:", meta_title['content'])

# 方法2:通过固定的测试ID定位标题元素(如果静态HTML中存在)
dataset_title = soup.find('h1', {'data-testid': 'dataset-title'})
if dataset_title:
    print("从标题元素获取的名称:", dataset_title.get_text(strip=True))

2. 使用Selenium处理动态渲染内容

如果页面内容完全是JS动态生成的,requests拿不到有效内容,就用Selenium模拟浏览器加载完整页面:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://www.kaggle.com/heptapod/titanic'

# 初始化Chrome浏览器(需提前下载对应版本的chromedriver)
driver = webdriver.Chrome()
driver.get(url)

try:
    # 等待标题元素加载完成(最多等10秒)
    dataset_title = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, 'h1[data-testid="dataset-title"]'))
    )
    print("数据集名称:", dataset_title.text.strip())
finally:
    # 关闭浏览器
    driver.quit()

3. 使用Scrapy批量爬取(适合多数据集场景)

如果需要批量获取多个数据集名称,可以用Scrapy结合Playwright插件处理JS渲染:

import scrapy
from scrapy_playwright.page import PageCoroutine

class KaggleDatasetSpider(scrapy.Spider):
    name = 'kaggle_dataset'
    start_urls = ['https://www.kaggle.com/heptapod/titanic']

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(
                url,
                meta={
                    'playwright': True,
                    'playwright_page_coroutines': [
                        # 等待标题元素加载完成
                        PageCoroutine('wait_for_selector', 'h1[data-testid="dataset-title"]'),
                    ],
                }
            )

    def parse(self, response):
        dataset_name = response.css('h1[data-testid="dataset-title"]::text').get().strip()
        yield {'数据集名称': dataset_name}

4. 推荐:使用Kaggle官方API(最可靠的方式)

爬取页面容易受页面结构变化影响,官方API是最稳定且合规的方案:

  1. 先安装Kaggle API:pip install kaggle
  2. 在Kaggle账户设置中生成API Token,将kaggle.json放到指定目录(Linux/macOS:~/.kaggle/;Windows:C:\Users\<你的用户名>\.kaggle\)
  3. 运行以下代码:
from kaggle.api.kaggle_api_extended import KaggleApi

api = KaggleApi()
api.authenticate()

# 获取指定数据集的详细信息
dataset_info = api.dataset_view('heptapod/titanic')
print("数据集名称:", dataset_info.title)

内容的提问来源于stack exchange,提问作者Abdellah-ELAAROUB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 11:53:12