如何从维基百科 api 中获取行和列形式的 table 数据?
How to get table data as rows and columns from wikipedia api?
当我尝试获取 table 数据作为 json 时,我可以在以下查询的 json 输出中找到可区分的子项:
我想获取此 table(文本)的行和列:-
https://en.wikipedia.org/wiki/List_of_football_clubs_in_India#Assam
JSON 输出看起来很复杂,我找不到从中提取文本的好方法。
(我在 Javascript (Node.js)
请帮忙..
我不确定,你期望什么。您对页面的 API 请求实际上是 return 将 wiki 文本封装到 JSON 结构中。但是,wiki 文本(table 所在的位置)不是 JSON,因此您不能真正这样解释它。
我也不是很清楚,你想知道什么信息。如果你想在 table 中拥有足球俱乐部,那么你唯一的选择就是解析 wiki 文本(你也可以 return 实际解析的 HTML 从 API 到使其成为 "easier") 并自己检查数据。但是,这可能是一个容易出错且不好玩的任务。
因此,如果您想以结构化数据格式获取印度的所有足球俱乐部,我可能最好尝试使用 Wikidata。它允许您处理所需信息的结构化数据(如果对象具有指向维基百科页面的 link,还可以让您获取维基百科文章的 link)。在您的用例中,尝试 Wikidata Query service.
可能是个好主意
在那里你可以发出这样的查询:
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". }
}
查询印度所有足球俱乐部的列表,return向您提供带有项目标签的列表以及 link 英文维基百科文章:
https://query.wikidata.org/#SELECT%20%3FitemLabel%20%3Fsitelink%20WHERE%20%7B%0A%20%20%3Fitem%20wdt%3AP31%20wd%3AQ476028%3B%0A%20%20%20%20%20%20%20%20wdt%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%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
假设这是 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, ' ');
以上代码可以让您干净地访问文本;但是,如何分隔列和行取决于您。
这会稍微降低性能(似乎,但我不确定是否存在其他更快的方法)。
这可以通过设置 prop=text
然后使用 JSDOM 解析获得的 HTML 来完成(来自 with/for Node.js)
我知道这个问题很老,但是有一个 API 可以解决这个问题。您可以提供页面标题,它将 return 您在 JSON 中选择的表格。
当我尝试获取 table 数据作为 json 时,我可以在以下查询的 json 输出中找到可区分的子项:
我想获取此 table(文本)的行和列:-
https://en.wikipedia.org/wiki/List_of_football_clubs_in_India#Assam
JSON 输出看起来很复杂,我找不到从中提取文本的好方法。
(我在 Javascript (Node.js)
请帮忙..
我不确定,你期望什么。您对页面的 API 请求实际上是 return 将 wiki 文本封装到 JSON 结构中。但是,wiki 文本(table 所在的位置)不是 JSON,因此您不能真正这样解释它。
我也不是很清楚,你想知道什么信息。如果你想在 table 中拥有足球俱乐部,那么你唯一的选择就是解析 wiki 文本(你也可以 return 实际解析的 HTML 从 API 到使其成为 "easier") 并自己检查数据。但是,这可能是一个容易出错且不好玩的任务。
因此,如果您想以结构化数据格式获取印度的所有足球俱乐部,我可能最好尝试使用 Wikidata。它允许您处理所需信息的结构化数据(如果对象具有指向维基百科页面的 link,还可以让您获取维基百科文章的 link)。在您的用例中,尝试 Wikidata Query service.
可能是个好主意在那里你可以发出这样的查询:
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". }
}
查询印度所有足球俱乐部的列表,return向您提供带有项目标签的列表以及 link 英文维基百科文章: https://query.wikidata.org/#SELECT%20%3FitemLabel%20%3Fsitelink%20WHERE%20%7B%0A%20%20%3Fitem%20wdt%3AP31%20wd%3AQ476028%3B%0A%20%20%20%20%20%20%20%20wdt%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%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
假设这是 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, ' ');
以上代码可以让您干净地访问文本;但是,如何分隔列和行取决于您。
这会稍微降低性能(似乎,但我不确定是否存在其他更快的方法)。
这可以通过设置 prop=text
然后使用 JSDOM 解析获得的 HTML 来完成(来自 with/for Node.js)
我知道这个问题很老,但是有一个 API 可以解决这个问题。您可以提供页面标题,它将 return 您在 JSON 中选择的表格。