Skip to main content
 首页 » 编程设计

python之如何在 Python 中抓取 Kaggle 数据集的无限滚动页面

2025年05月04日25lexus

我想提取 Kaggle 中所有可用数据集的列表,请参见 URL: kaggle.com/datasets

但是,由于该页面是基于无限滚动的,所以我不能使用一次加载整个页面的传统抓取方法。 非常感谢任何建议。

请您参考如下方法:

如果您检查浏览器,您会发现每次向下滚动时都会在网络选项卡中发出 AJAX 请求。

请求发送至:

https://www.kaggle.com/datasets.json?sortBy=hottest&group=all&page=2 

以 json 格式返回结果。您可以继续 incirmenting page 直到达到最大结果。 json 文件具有关键字 u'totalDatasetListItems': 770 并且每次搜索返回 20 个结果,因此您可以使用该信息来开发循环。

此示例适用于 python3,展示了如何使用这种分页系统获取并发请求。

import scrapy 
import json 
from w3lib.url import add_or_replace_parameter 
class MySpider(scrapy.Spider): 
    name = 'myspider' 
    start_urls = ['https://www.kaggle.com/datasets.json?sortBy=hottest&group=all&page=1'] 
 
    def parse(self, response): 
        data = json.loads(response.body)  
        total_results = data['totalDatasetListItems'] 
        page = 1 
        # figure out how many pages are there and loop through them. 
        for i in range(20, total_results, 20):  # step 20 since we have 20 results per page 
            url = add_or_replace_parameter(response.url, 'page', page) 
            yield scrapy.Request(url, self.parse_page) 
 
        # don't forget to parse first page as well! 
        yield from self.parse_page(self, response) 
 
    def parse_page(self, response): 
        data = json.loads(response.body)  
        # parse page data here 
        for item in data['datasetListItems']: 
            item = dict() 
            yield item