【问题标题】:Extracting parent category ID from wiki API using article ID?使用文章 ID 从 wiki API 中提取父类别 ID?
【发布时间】:2020-04-19 11:55:30
【问题描述】:

使用external tool 从转储文件中解析维基百科文章(例如enwiki-20200401-pages-articles-multistream.xml.bz2)
ID,以及作为字符串的类别
例如

{'Title':'The Dark Knight (film)',
'id':4276475,
'Categories':['2008 films',English-language films,'2000s action thriller films',...,]
}

不幸的是,这些类别太细了,我正在尝试获取(例如这里的动作惊悚片),因此,试图在文章列表中找到每个类别的父类别。

提取类别相对简单:

import wptools
page = wptools.page('The Dark Knight (film)')
categories_and_more = page.get_more()
one_category = wptools.page(categories_and_more.data['categories'][0])

但提取所有将此类别视为子类别的类别并不简单。

【问题讨论】:

  • 不确定 wptools 公开了什么,但 API 可以采用 pageid 参数而不是 title。而且,deepcat search 可能是一种更简单(如果更有限)的方法。
  • 感谢您的评论,不幸的是,当我尝试查询所有类别时,API 阻止了我太多的请求。我现在正在尝试使用转储文件来提取它。谢谢!

标签: python mediawiki wikipedia


【解决方案1】:

一旦您的 SQL 服务器中有categorylinks.sql,这很容易做到。您只会得到cl_from=article_id 所在的行,而父级的标题将由列cl_to 给出。您可以通过获取另一个表 page.sql 来搜索父级的 id,然后使用 page_namespace=14 AND page_title=parent_title 反向搜索 id。

不幸的是,转储非常大,导入它们可能需要很长时间。请参阅此处了解如何加快导入速度:loading enwiki-latest-categorylinks.sql into mysql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2020-03-05
    • 1970-01-01
    • 2020-12-06
    • 2012-12-13
    • 2017-05-26
    • 2017-09-24
    相关资源
    最近更新 更多