mysql - 如何下载维基百科中某个类别内的所有页面?

标签 mysql mediawiki wiki wikipedia wikipedia-api

我想检索维基百科类别中的所有文章网址(我不需要整个文本)。

例如,如果我想获取以下类别的所有文章网址:https://en.wikipedia.org/wiki/Category:History ,最好的方法是什么?

是否有必要下载整个mysql转储并进行手动查询?

最佳答案

使用维基百科 API。

"query"行动,关于"categorymembers"列表,就是你想要的。列出类别中的页面的查询示例可能是:

https://en.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:History&cmprop=title

请注意:

  1. 默认情况下,结果以显示 JSON 数据的格式化 HTML 形式返回。这纯粹是为了调试,而不是为了生产使用。传递 format=json 参数以从 API 返回未格式化的 JSON。 (还有许多其他格式可用;有关详细信息,请阅读文档。)

  2. 此查询的结果已分页。您可以使用 cmlimit 参数增加页面大小,但最终您可能需要通过从结果中提取 cmcontinue 值并将其传递到同名。

  3. 该类别中的许多“页面”实际上是其他类别。无法递归列出某个类别及其包含的所有类别的内容,因为维基百科的类别不是层次结构。某些类别将包含包含它们的类别,或者包含不是严格子集的其他类别。 (维基百科的“类别”实际上是标签多于类别,但该名称已经足够古老,现在无法更改。)

关于mysql - 如何下载维基百科中某个类别内的所有页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40119322/

相关文章:

mysql - 如何从脚本将xml插入mysql?

mysql - 通过 BOOLEAN 值优化 SQL (mySQL)

mysql - 如何只显示出现次数第二多的值?

wolfram-mathematica - 如何使用扩展名 "SyntaxHighlight GeSHi"为 MediaWiki 启用 Mathematica 语法突出显示?

sql - 数据库中大型集合的版本控制以用于撤消目的

azure - 使用 Pandoc,如何将 docx 文件转换为适合 Azure Wiki 格式的文件?

php - 使用 Div 显示 MySql 数据

iphone - iOS 应用程序中的维基百科

mediawiki - 维基百科/MediaWiki API : Find if an article is about a person, 组织或位置

php - 现有类似wiki的markdown项目的建议