如何在Python中刮取Kaggle数据集的无限滚动页面?

时间:2017-02-27 05:13:15

标签: python web-scraping scrapy kaggle

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

然而,由于页面是基于无限滚动的,我不能使用传统的报废方法,其中整个页面一次被加载。 任何建议都非常感谢。

3 个答案:

答案 0 :(得分:4)

如果您检查浏览器,您可以看到每次向下滚动时都会在网络选项卡中发出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

答案 1 :(得分:1)

您实际上并不需要抓取,您可以获取所有可用数据集from the API的列表。安装和配置后,您可以获得如下数据集列表:

kaggle datasets list

您还可以使用API​​下载数据集。例如,这将下载CITES Wildlife Trade Database。 (如果您只对特定数据集感兴趣,可以将代码下载到该数据集的数据列表底部。)

kaggle datasets download -d cites/cites-wildlife-trade-database

希望有所帮助! :)

答案 2 :(得分:0)

网站通过GET请求获取列表数据。 将GET请求发送到网址:

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

在响应函数中,您应该像这样解析json数据:

bundle_of_data = json.loads(response.body)
for entry in prod_data['bundle_of_data ']
    title = entry['title]
    forum_url = entry['forumUrl']
    ...

通过这种方式,您可以通过增加网址中“page”参数的数量来获取第二页的数据。

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

直到没有数据检索。