批量转换MediaWiki页面至HTML的API与本地方案优化问询
获取MediaWiki站点600-700页面HTML的优化方案探讨
已尝试的方案
选项1:使用action=parse Action API
效果良好,单页耗时约0.75秒,但不支持通过|分隔多页批量处理,只能通过循环逐个请求。Python示例代码:
def get_html(title): headers = {"User-Agent": USER_AGENT} pages = [] if not isinstance(title, list): title = [title] for t in title: params = { "page": t, "action": "parse", "format": "json", "formatversion": "2", } req = requests.get(API_URL, headers=headers, params=params) pages.append(req.json()['parse']['text']) return pages
选项2:使用Wiki URL的render动作(非API)
仅支持单页处理,单页平均耗时约0.75秒,无批量处理能力。
选项3:使用REST API的/page/title/with_html或/page/title/html端点
需要目标Wiki部署RESTBase和VirtualRESTService,但目标站点未部署且无法自行安装;单请求耗时约0.75秒,无效率优势。
选项4:批量获取维基文本+Parasoid转换
通过action=query批量获取维基文本(50页/请求,总耗时约10秒),再传入Parasoid转换为HTML,单页转换耗时约0.185秒,但仍需循环处理,且模板、链接等内容需要后续修正。Python示例代码:
def get_html_parasoid(text): pages = [] if not isinstance(text, list): text = [text] for t in text: data = { "wikitext": t, } # 替换为对应Parasoid转换接口地址 PARSOID_URL = "Parasoid转换接口地址" headers = {"User-Agent": USER_AGENT} req = requests.post(PARSOID_URL, headers=headers, data=data) pages.append(req.text) return pages
选项5:action=query+prop=revisions+rvparse
该方式已废弃,无替代方案(仅action=parse可用),且仅返回首个页面的HTML(文档显示此选项强制设置rvlimit=1)。
疑问与需求
- 使用MediaWiki API时,循环请求真的是最优方案吗?
- 是否支持像
query那样通过?titles=file1|file2|file3|...的方式批量调用parse或render? - 若采用本地转换维基文本为HTML的方案,能否实现无需在pip/conda虚拟环境外安装额外工具?
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

