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