维基百科API查询需求及list、generator、search选型困惑
嘿,我来帮你理清这个维基百科API的查询问题!你要的是标题以"Avatar"开头、分类为"English language films"的条目,还要抓URL、标题、日期、摘要和主图对吧?之前用list=allpages没搞定很正常,因为它本身没法直接结合分类筛选,得搭配其他参数或者换用不同的query模块。下面我给你拆解三种可行的思路,包括你提到的allpages,以及另外两种更实用的方式,帮你精准拿到需要的数据:
方法1:用
list=allpages + 分类验证(多轮请求) allpages可以按标题前缀筛选,但没法直接限定分类,所以得先拿到所有标题以"Avatar"开头的页面,再逐个验证是否属于目标分类:
- 先获取前缀为"Avatar"的页面列表:
https://en.wikipedia.org/w/api.php?action=query&list=allpages&apfrom=Avatar&aplimit=50&format=json - 对每个页面的
pageid,用prop=categories检查是否包含目标分类:https://en.wikipedia.org/w/api.php?action=query&prop=categories&pageids=【替换为实际pageid】&clcategories=Category:English language films&format=json - 最后对符合条件的页面,请求完整字段:
https://en.wikipedia.org/w/api.php?action=query&pageids=【替换为实际pageid】&prop=info|extracts|pageimages&inprop=url|modified&exintro=1&explaintext=1&pithumbsize=300&format=json
缺点:需要多轮请求,效率低,且aplimit有上限,处理大量数据时很麻烦。
方法2:用
list=search + 分类限定(文本搜索结合) 维基百科的search模块支持用搜索语法同时限定标题前缀和分类,直接命中符合条件的页面:
- 先搜索符合条件的页面列表:
https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch=intitle:Avatar incategory:"English language films"&srlimit=50&srprop=timestamp|snippet&format=json - 拿到每个结果的
pageid后,再请求完整的URL、摘要和主图(同方法1的第三步请求)。
优点:一步拿到符合条件的页面列表;缺点:搜索结果排序不一定严格按标题前缀,且返回的snippet不是完整摘要,需要二次请求补全。
方法3:用
generator=categorymembers + 标题前缀过滤(最优解) 这是最高效的方式,直接从目标分类里筛选标题以"Avatar"开头的页面,一次请求就能拿到所有需要的字段:
https://en.wikipedia.org/w/api.php?action=query&generator=categorymembers&gcmtitle=Category:English language films&gcmtitleprefix=Avatar&gcmlimit=50&prop=info|extracts|pageimages&inprop=url|modified&exintro=1&explaintext=1&pithumbsize=300&format=json
参数解释:
generator=categorymembers:以分类成员作为生成器,直接获取分类下的页面gcmtitleprefix=Avatar:筛选标题以"Avatar"开头的页面prop=info|extracts|pageimages:同时获取页面信息(URL、修改日期)、纯文本摘要、主图缩略图exintro=1&explaintext=1:只返回正文开头的摘要,且为纯文本格式pithumbsize=300:指定主图缩略图的尺寸
这个请求返回的每个条目里,你需要的字段都齐全:title(标题)、fullurl(页面URL)、touched(修改日期)、extract(摘要)、thumbnail(主图地址)。如果结果超过50条,用gcmcontinue参数分页即可。
你之前可能没把generator和categorymembers结合起来用,这才是完全匹配你需求的最优方案——不需要多轮请求,一次就能搞定所有数据。
内容的提问来源于stack exchange,提问作者Le Mot Juiced
相关产品推荐
相关产品推荐

