Mysql 如何下载维基百科中一个类别内的所有页面?
我想检索维基百科类别中的所有文章URL(我不需要整个文本) 例如,如果我想从以下类别获取所有文章URL:,那么最好的方法是什么Mysql 如何下载维基百科中一个类别内的所有页面?,mysql,mediawiki,wiki,wikipedia,wikipedia-api,Mysql,Mediawiki,Wiki,Wikipedia,Wikipedia Api,我想检索维基百科类别中的所有文章URL(我不需要整个文本) 例如,如果我想从以下类别获取所有文章URL:,那么最好的方法是什么 有必要下载整个mysql转储并进行手动查询吗?不必是mysql。有更简单的方法。 您只需编写一段简短的代码即可。 只需使用regex或查找关键字,就像链接具有特定模式来定位它们一样: in this case it's "< a href="/wiki/ " or so as the starter "</a>" to the end 在这种情况下
有必要下载整个mysql转储并进行手动查询吗?不必是mysql。有更简单的方法。 您只需编写一段简短的代码即可。 只需使用regex或查找关键字,就像链接具有特定模式来定位它们一样:
in this case it's
"< a href="/wiki/ " or so as the starter
"</a>" to the end
在这种情况下
“
使用维基百科API
列表上的操作就是此处所需的操作。在类别中列出页面的查询示例可能是:
请注意:
format=JSON
参数以从API获取未格式化的JSON。(还有许多其他格式可用;有关详细信息,请阅读文档。)cmlimit
参数增加页面大小,但最终可能需要通过从结果中提取cmcontinue
值并将其传递到同名参数中来分页结果如果您不介意使用PHP来帮助实现这一点,那么该库有一个系统,可以递归地检索给定类别中的所有页面
$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();
}
不管是什么语言,但这就像“爬行”,这是我想要避免的。尝试模仿网络爬虫几乎总是最糟糕的方法。api/dumps/etc的提供完全是为了让您不必经历它。我不想使用api,因为我也想获得子类别页面(递归深度为8或更多)。正如我所解释的,不要这样做。维基百科的分类是不分等级的;你最终会得到比你预期的多得多的文章,而且其中许多文章与原始分类无关。即使你决定——反对我的建议——递归,API将是实现这一点的最简单方法。我理解,我认为我会深入使用这些days continuation的工作原理是获取结果集的
continue
属性中的键值对,并将它们添加到查询中。