使用Wikipedia API generator=allpages获取标题重复问题求助
问题根源与解决方案
你遇到的重复问题核心是混淆了两种不同continue参数的作用:
gapcontinue:是针对generator=allpages的分页标记,用来获取下一批新页面clcontinue:是针对prop=categories的续传标记,仅用来获取当前这批页面未返回完的分类数据,不能用来推进到下一批页面
正确的分页流程
- 初始请求保持你原来的参数:
GET https://it.wikipedia.org/w/api.php?action=query&generator=allpages&gapnamespace=0&gapfilterredir=nonredirects&gaplimit=500&prop=description|categories&converttitles=true&format=json&origin=* - 处理响应的
continue对象:- 如果响应里同时存在
gapcontinue和clcontinue:反复使用clcontinue参数发起请求,直到响应的continue中不再包含clcontinue(说明当前这批页面的分类数据已全部获取) - 当
continue中只剩gapcontinue时,使用该参数发起请求,即可获取下一批全新的页面数据
- 如果响应里同时存在
- 重复上述步骤,直到响应中没有
continue对象,说明所有页面已遍历完成
简化方案(如果仅需页面标题)
如果你的目标只是下载所有页面标题,完全可以去掉prop=description|categories参数,此时响应中只会返回gapcontinue,分页逻辑会更简单:
GET https://it.wikipedia.org/w/api.php?action=query&generator=allpages&gapnamespace=0&gapfilterredir=nonredirects&gaplimit=500&converttitles=true&format=json&origin=*
每次分页直接使用返回的gapcontinue即可,不会出现参数混淆的问题
内容的提问来源于stack exchange,提问作者Andrea Silvestri
相关产品推荐
相关产品推荐

