Получить текстовое содержимое со страницы MediaWiki через API - PullRequest
53 голосов
/ 26 октября 2009

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

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

Но мне нужен только текстовый контент без вики-разметки. Это возможно с MediaWiki API?

Ответы [ 10 ]

64 голосов
/ 27 мая 2011

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

/ api.php? Действие = синтаксический анализ и страница = тест

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

39 голосов
/ 18 февраля 2014

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

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

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

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

28 голосов
/ 06 марта 2014

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

23 голосов
/ 10 июня 2015

Вы можете получить вики-данные в текстовом формате из 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=: устранение проблем с перенаправлением.
9 голосов
/ 24 апреля 2012
5 голосов
/ 26 октября 2009

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

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

EDIT:

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

2 голосов
/ 28 декабря 2017

Используйте 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

2 голосов
/ 03 августа 2017

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

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

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

0 голосов
/ 23 июня 2017

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

0 голосов
/ 26 октября 2009

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

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

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

...