Как получить данные таблицы в виде строк и столбцов из Википедии API? - PullRequest
0 голосов
/ 21 апреля 2020

Когда я пытался получить данные таблицы как json, я мог найти различимых дочерних элементов в выводе json следующего запроса:

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

Я хочу получить строки и столбцы этой таблицы (текст): -

https://en.wikipedia.org/wiki/List_of_football_clubs_in_India#Assam

Вывод JSON кажется сложным, и я не Не могу найти хороший способ извлечь из него текст.

(я делаю это в Javascript (Node.js)

Пожалуйста, помогите ..

Ответы [ 3 ]

1 голос
/ 21 апреля 2020

Я не уверен, что вы ожидаете. Ваш запрос API к странице фактически возвращает вики-текст, инкапсулированный в структуру JSON. Однако вики-текст (частью которого является таблица) не JSON, поэтому вы не можете толковать его как таковой.

Я также не совсем уверен, какую информацию вы хотите получить. Если вы хотите, чтобы футбольные клубы были в таблице, тогда ваша единственная ставка - это анализ wikitext (вы также можете вернуть фактический проанализированный HTML из API, чтобы сделать его «проще») и go через данные самостоятельно. , Тем не менее, это, вероятно, ошибка, а не забавная задача.

Так что, если вы хотите получить все футбольные клубы Индии в формате структурированных данных, я, вероятно, лучше для этого попробую Wikidata. Он позволяет вам структурировать данные для получения необходимой информации (а также получать ссылки на статьи Википедии, если у объектов есть ссылка на страницу Википедии). В вашем случае использования, вероятно, будет хорошей идеей попробовать Сервис запросов 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". }
}

, который запрашивает список всех футбольных клубов в Индии и возвращает вам список с ярлыком товара, а также ссылку на статью в Википедии engli sh: 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

0 голосов
/ 23 апреля 2020

Это немного замедлит производительность (кажется, но я не уверен, существует ли какой-либо другой более быстрый способ). Это можно сделать, установив prop=text и затем проанализировав полученные HTML, используя JSDOM (поставляется с / для Node.js)

0 голосов
/ 21 апреля 2020

Предположим, что это res - это данные, которые вы получаете из вики

//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, ' ');

Приведенный выше код может дать вам чистый доступ к тексту; однако, как вы собираетесь разделить столбец и строку, зависит от вас.

...