Получение текстового содержимого со страницы mediawiki через API

StackOverflow https://stackoverflow.com/questions/1625162

Вопрос

Я совсем новичок в MediaWiki, и теперь у меня возникла небольшая проблема.У меня есть заголовок некоторой вики-страницы, и я хочу получить только текст указанной страницы, используя api.php, но все, что я нашел в API, - это способ получить вики-содержимое страницы (с вики-разметкой).Я использовал этот HTTP-запрос...

/api.php?action=query&prop=revisions&rvlimit=1&rvprop=content&format=xml&titles=test

Но мне нужно только текстовое содержимое, без вики-разметки.Возможно ли это с помощью MediaWiki API?

Это было полезно?

Решение

Я не думаю, что с помощью API возможно получить только текст.

Что сработало для меня, так это запросить HTML-страницу (используя обычный URL-адрес, который вы бы использовали в браузере) и удалить HTML-теги под разделом содержимого.

Редактировать:

Я добился хороших результатов, используя Анализатор HTML для Java.В нем есть примеры того, как удалить HTML-теги под заданным DIV.

Другие советы

Используйте action = parse , чтобы получить html:

/api.php?action=parse&page=test

Один из способов получить текст из html - загрузить его в браузер и пройтись по узлам, просматривая только текстовые узлы, используя JavaScript.

Расширение API TextExtracts делает то, что вы просите. Используйте prop = extracts , чтобы получить очищенный ответ. Например, эта ссылка будет очищена текст статьи для переполнения стека . Что еще приятно, так это то, что он все еще включает теги разделов, так что вы можете идентифицировать отдельные разделы статьи.

Чтобы включить видимую ссылку в мой ответ, приведенная выше ссылка выглядит следующим образом:

/api.php?format=xml&action=query&prop=extracts&titles=Stack%20Overflow&redirects=true

Редактировать. Как упоминал Amr, TextExtracts является расширением для MediaWiki, поэтому он не обязательно будет доступен для каждого сайта MediaWiki.

Добавление ? action = raw в конце страницы MediaWiki возвращает последнее содержимое в необработанном текстовом формате. Например: - https://en.wikipedia.org/wiki/Main_Page?action=raw

Вы можете получить вики-данные в текстовом формате из API, используя explaintext параметр.Кроме того, если вам нужно получить доступ к информации о многих названиях, вы можете получить вики-данные всех названий за один вызов.Используйте символ канала | чтобы отделить каждый заголовок.Например, этот вызов API вернет данные со страниц "Google" и "Yahoo":

http://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=Yahoo|Google&redirects=

Параметры:

  • explaintext:Возвращайте выдержки в виде обычного текста вместо ограниченного HTML.
  • exlimit=max:Возвращает более одного результата.В настоящее время максимальное значение составляет 20.
  • exintro:Возвращайте только содержимое перед первым разделом.Если вам нужны полные данные, просто удалите это.
  • redirects=:Устраните проблемы с перенаправлением.

Пользователи Python, приходящие на этот вопрос, могут быть заинтересованы в википедии модуль ( документы ):

import wikpedia
wikipedia.set_lang('de')
page = wikipedia.page('Wikipedia')
print(page.content)

Любое форматирование, кроме разделов ( == ), удаляется.

Используйте action=render, чтобы получить максимально чистую страницу:

https://wiki.eclipse.org/Tip_of_the_Day/Eclipse_Tips/Now_where_was_I?action=render

против

https://wiki.eclipse.org/Tip_of_the_Day/Eclipse_Tips/Now_where_was_I

Вики-страницы без каких-либо символов форматирования не имеют большого смысла во многих случаях.

Если хотите, вы можете самостоятельно отформатировать форматирование, но в процессе вы не справитесь.

(Если вы не создаете что-то вроде поисковой системы, в этом случае вам понадобятся только текстовые части и вы можете полностью игнорировать форматирование символов)

Вы можете сделать одну вещь после того, как содержимое будет перенесено на вашу страницу - вы можете использовать функцию PHP strip_tags () для удаления тегов HTML.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top