我想检索维基百科类别中的所有文章url(我不需要整个文本)。
例如,如果我想从以下类别获取所有文章url:https://en.wikipedia.org/wiki/Category:History,那么最好的方法是什么?
有必要下载整个mysql转储并进行手动查询吗?

最佳答案

如果您不介意使用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();
}

08-25 13:09
查看更多