如何获取维基百科页面全部链接并排除底部navbox内链接?
解决方法
维基百科的links属性API本身确实没有直接排除navbox链接的参数,不过可以通过以下两种方式实现需求:
方法一:用Parse API获取页面HTML后过滤
调用action=parse接口获取页面的完整HTML,然后通过CSS选择器排除.navbox(或相关导航盒类名)区域内的链接。示例请求:https://en.wikipedia.org/w/api.php?origin=*&action=parse&page=Charles%20Maurice%20de%20Talleyrand-Périgord&prop=text拿到HTML后,用前端DOM操作或者后端HTML解析库(比如Python的BeautifulSoup),选取所有
<a>标签但排除.navbox a这类选择器匹配到的元素,提取其中以/wiki/开头的维基链接(注意排除特殊页面链接)。方法二:解析维基文本过滤模板内的链接
如果是后端处理,先通过action=query的revisions属性获取页面原始维基文本:https://en.wikipedia.org/w/api.php?origin=*&action=query&titles=Charles%20Maurice%20de%20Talleyrand-Périgord&prop=revisions&rvprop=content然后用维基文本解析库(比如Python的
mwparserfromhell)解析文本,遍历所有链接的同时,排除位于{{Navbox}}(或对应导航盒模板)内部的链接。这种方法更精准,因为navbox都是通过模板插入的,直接过滤模板内的内容即可。
注意:维基百科的导航盒模板可能有多个类名或模板名称(比如Navbox、Sidebar等),需要根据目标页面的实际模板情况调整过滤规则。
内容的提问来源于stack exchange,提问作者crazyforMcCafe
相关产品推荐
相关产品推荐

