如何从wikipedia api中获取行和列的表格数据?

问题描述 投票:0回答:2

当我试图以json的形式获取表格数据时,我可以在以下查询的json输出中找到可区分的子代。

https:/en.wikipedia.orgwapi.php?action=parse&page=List_of_football_clubs_in_India&prop=wikitext&section=3&format=json。

我想得到这个表格的行和列(文本):-。

https:/en.wikipedia.orgwikiList_of_football_clubs_in_India#Assam。

JSON输出看起来很复杂,我没有找到一个很好的方法来从中提取文本。

(我是在Javascript(Node.js)中做的)

请帮助...

javascript node.js json mediawiki wikipedia-api
2个回答
1
投票

我不知道,你希望得到什么。你对页面的API请求实际上是返回封装成JSON结构的wikitext。然而,wikitext(表是其中的一部分)不是JSON,所以你不能真正将其解释为JSON。

我也不太确定,你想要的信息是什么。如果你想在表格中找到足球俱乐部,那么你唯一的选择就是解析wikitext(你也可以从API中返回实际解析过的HTML,以使其 "更容易"),然后自己去查看数据。然而,这可能是一个容易出错且不好玩的任务。

所以,如果你想以结构化的数据格式获得印度所有的足球俱乐部,我可能最好试试Wikidata。它可以让你通过结构化数据来获取你所需要的信息(如果对象有链接到维基百科页面,还可以获取维基百科文章的链接)。在你的使用案例中,也许你可以尝试使用 维基数据查询服务.

在那里,你可以发出这样的查询。

SELECT ?itemLabel ?sitelink WHERE {
  ?item wdt:P31 wd:Q476028;
        wdt:P17 wd:Q668.
  ?sitelink schema:isPartOf <https://en.wikipedia.org/>;
            schema:about ?item.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}

查询印度所有足球俱乐部的列表 并返回一个带有项目标签和英文维基百科文章链接的列表。https:/query.wikidata.org#SELECT%20%3FitemLabel%20%3Fsitelink%20WHERE%20%7B%0A%20%3Fitem%20wdt%3AP31%20wd%3AQ476028%3B%0A%20%20%20%20%wdt%3AP17%20wd%3AQ668. %0A%20%20%3Fsitelink%20schema%3AisPartOf%20%3Chttps%3A%2F%2Fen. wikipedia.org%2F%3E%3B%0A%20%20%20%20%20%20%20%20%20schema%3Aabout%20%3Fitem. %0A%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE%5D%2Cen%22.%20%7D%0A%7D。


0
投票

假设这是 res 是你从wiki中得到的数据。

//This will get you the innermost part of the object which is the text you want
let wikiText = res.parse.wikitext['*'];

//This will strip out all the numbers and non-alphabet charater.
let pureText=wikitext.replace(/[^a-zA-Z\s]+/g, ' ');

上面的代码可以给你提供干净的文本访问;但是,如何将列和行分开,则取决于你。


0
投票

这将会减慢一点性能(似乎,但我不确定是否有其他更快的方法存在)。这可以通过设置 prop=text 然后用JSDOM(自带for Node.js)解析得到的HTML。


0
投票

我知道这个问题已经很老了,但有一个...。API 为这个。你可以提供一个页面标题,它将以JSON格式返回你选择的表格。

© www.soinside.com 2019 - 2024. All rights reserved.