我想检索维基百科分类内的所有文章网址(我不需要整个文本)。
例如,如果我想获取以下类别中的所有文章urls:https://en.wikipedia.org/wiki/Category:History,最好的方法是什么?
是否有必要下载整个mysql转储并进行手动查询?
发布于 2016-10-19 13:10:19
如果您不介意使用PHP来帮助实现这一点,addwiki/mediawiki-api库有一个系统可以递归地检索给定类别中的所有页面。类似于以下内容:
$api = new \Mediawiki\Api\MediawikiApi( 'http://en.wikipedia.org/w/api.php' );
$services = new \Mediawiki\Api\MediawikiFactory( $api );
$categoryTraverser = $services->newCategoryTraverser();
// Get the root category.
$rootCatIdent = new PageIdentifier( new Title( 'Category:History' ) );
$rootCat = $this->factory->newPageGetter()->getFromPageIdentifier( $pageIdentifier );
// Get all page URLs:
$allPages = $categoryTraverser->descend( $rootCat );
foreach ($allPages->toArray() as $page) {
echo 'https://en.wkipedia.org/wiki/'.$page->getPageIdentifier()->getTitle()->getText();
}发布于 2016-10-19 07:27:31
使用Wikipedia API。
"categorymembers"列表上的"query"操作就是您在这里需要的。在一个类别中列出页面的查询示例可能是:
请注意:
默认情况下,结果以显示数据的格式化
format=json参数以从API中获取未格式化的JSON。(还有许多其他格式可用;有关详细信息,请阅读文档。)cmlimit参数增加页面大小,但最终可能需要通过从结果中提取cmcontinue值并将其传递到同名的参数中来对结果进行分页。发布于 2016-10-19 07:13:15
不一定是MySQL。有更简单的方法。您只需编写一段简短的代码即可完成此操作。只需使用正则表达式或查找关键字,例如链接具有特定的模式来定位它们:
in this case it's
"< a href="/wiki/ " or so as the starter
"</a>" to the endhttps://stackoverflow.com/questions/40119322
复制相似问题