我想提取Kaggle中可用的所有数据集的列表,请参阅URL: kaggle.com/datasets
然而,由于页面是基于无限滚动的,我不能使用传统的报废方法,其中整个页面一次被加载。 任何建议都非常感谢。
答案 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
...
直到没有数据检索。