我想提取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