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

但是,由于页面是基于无限滚动的,因此我无法使用传统的剪贴方法来一次加载整个页面。
任何建议都非常感谢。

最佳答案

如果您检查浏览器,则可以看到每次向下滚动“网络”标签中的AJAX请求。

该请求被发送至:

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


它将以json格式返回结果。您可以继续增加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

10-06 14:44