Подтвердить что ты не робот

Как получить обычный текст из википедии

Я искал около 2 месяцев, чтобы найти script, который содержит только раздел описания Википедии. (Это для бота, который я строю, а не для IRC.) То есть, когда я говорю

/wiki bla bla bla

он перейдет на страницу в Википедии bla bla bla, и затем верните ее в комнату чата:

"Bla Bla Bla" - это название песни сделанный Гиги Д'Агостино. Он описал эта песня как "часть, которую я написал всех людей, которые говорят и разговаривают ничего не говоря". заметный, но бессмысленный вокал образцы берутся из британской группы Стретч-песня "Почему ты это сделал"

Вот ближайший я нашел, но он получает только URL:

import json
import urllib.request, urllib.parse

def google(searchfor):
  query = urllib.parse.urlencode({'q': searchfor})
  url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query

  search_response = urllib.request.urlopen(url)
  search_results = search_response.read().decode("utf8")
  results = json.loads(search_results)
  data = results['responseData']
  hits = data['results']

  if len(hits) > 0:
    return hits[0]['url']
  else:
    return "No results found."

(Python 3.1)

4b9b3361

Ответ 1

Используйте API MediaWiki, который работает в Википедии. Вам нужно будет самостоятельно проанализировать данные.

Например:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&&titles=Bla%20Bla%20Bla

означает

fetch (action = query) содержимое (rvprop = content) самой последней версии главной страницы (title= Main %20Page) в формате JSON (format = json).

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

Ответ 2

Вот несколько разных возможных подходов; используйте то, что работает для вас. Все приведенные ниже примеры кода используют requests для HTTP-запросов к API; вы можете установить requests с помощью pip install requests, если у вас есть Pip. Они также используют API Mediawiki, а два используют query конечная точка; следуйте этим ссылкам, если вы хотите документацию.

1. Получите текстовое представление как всей страницы, так и страницы "extract" прямо из API с помощью extracts prop

Обратите внимание, что этот подход работает только на сайтах MediaWiki с расширением TextExtracts. Это, в частности, включает Википедию, но не некоторые небольшие сайты Mediawiki, например, http://www.wikia.com/

Вы хотите нажать URL, например

https://en.wikipedia.org/w/api.php?action=query&format=json&titles=Bla_Bla_Bla&prop=extracts&exintro&explaintext

Разрушая это, у нас есть следующие параметры: (https://www.mediawiki.org/wiki/Extension:TextExtracts#query+extracts):

  • action=query, format=json и title=Bla_Bla_Bla - все стандартные параметры API MediaWiki.
  • prop=extracts позволяет использовать расширение TextExtracts
  • exintro ограничивает ответ на контент до заголовка первого раздела.
  • explaintext делает экстракт в ответе простым текстом вместо HTML

Затем проанализируйте ответ JSON и извлеките извлечение:

>>> import requests
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'query',
...         'format': 'json',
...         'titles': 'Bla Bla Bla',
...         'prop': 'extracts',
...         'exintro': True,
...         'explaintext': True,
...     }
... ).json()
>>> page = next(iter(response['query']['pages'].values()))
>>> print(page['extract'])
"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

2. Получите полный HTML-код страницы с помощью конечной точки parse, проанализируйте ее и извлеките первый абзац

MediaWiki имеет parse конечную точку, с которой вы можете получить URL-адрес, например https://en.wikipedia.org/w/api.php?action=parse&page=Bla_Bla_Bla, чтобы получить HTML-страницу. Затем вы можете разобрать его с помощью парсера HTML, например lxml (сначала установите его с помощью pip install lxml), чтобы извлечь первый абзац.

Например:

>>> import requests
>>> from lxml import html
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'parse',
...         'page': 'Bla Bla Bla',
...         'format': 'json',
...     }
... ).json()
>>> raw_html = response['parse']['text']['*']
>>> document = html.document_fromstring(raw_html)
>>> first_p = document.xpath('//p')[0]
>>> intro_text = first_p.text_content()
>>> print(intro_text)
"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

3. Parse wikitext yourself

Вы можете использовать API query, чтобы получить wikitext страницы, проанализировать его с помощью mwparserfromhell (сначала установить его с помощью pip install mwparserfromhell), а затем свести его к удобочитаемому человеку с помощью strip_code. strip_code не работает отлично на момент написания (как показано в примере ниже), но, надеюсь, улучшится.

>>> import requests
>>> import mwparserfromhell
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'query',
...         'format': 'json',
...         'titles': 'Bla Bla Bla',
...         'prop': 'revisions',
...         'rvprop': 'content',
...     }
... ).json()
>>> page = next(iter(response['query']['pages'].values()))
>>> wikicode = page['revisions'][0]['*']
>>> parsed_wikicode = mwparserfromhell.parse(wikicode)
>>> print(parsed_wikicode.strip_code())
{{dablink|For Ke$ha song, see Blah Blah Blah (song). For other uses, see Blah (disambiguation)}}

"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

Background and writing
He described this song as "a piece I wrote thinking of all the people who talk and talk without saying anything". The prominent but nonsensical vocal samples are taken from UK band Stretch song "Why Did You Do It"''.

Music video
The song also featured a popular music video in the style of La Linea. The music video shows a man with a floating head and no arms walking toward what appears to be a shark that multiplies itself and can change direction. This style was also used in "The Riddle", another song by Gigi D'Agostino, originally from British singer Nik Kershaw.

Chart performance
Chart (1999-00)PeakpositionIreland (IRMA)Search for Irish peaks23

References

External links


Category:1999 singles
Category:Gigi D'Agostino songs
Category:1999 songs
Category:ZYX Music singles
Category:Songs written by Gigi D'Agostino

Ответ 3

Вы можете получить только первый раздел с помощью API:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvsection=0&titles=Bla%20Bla%20Bla&rvprop=content

Это даст вам сырой wikitext, вам придется иметь дело с шаблонами и разметкой.

Или вы можете получить всю страницу, представленную в HTML, которая имеет свои плюсы и минусы, поскольку разбор:

http://en.wikipedia.org/w/api.php?action=parse&prop=text&page=Bla_Bla_Bla

Я не вижу простой способ получить синтаксический анализ HTML первого раздела в одном вызове, но вы можете сделать это с помощью двух вызовов, передав wikitext, который вы получите с первого URL-адреса, с помощью text= вместо page= во втором URL.

UPDATE

Извините, я пренебрег частью "простого текста" вашего вопроса. Получите часть статьи, которую вы хотите, как HTML. Это намного проще сшить HTML, чем разбить wikitext!

Ответ 4

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

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

Здесь этот вызов api возвращает данные Googles и Yahoos.

explaintext = > Возвращает выдержки как обычный текст вместо ограниченного HTML.

exlimit = max (теперь его 20); В противном случае возвращается только один результат.

exintro = > Возвращайте только содержимое до первого раздела. Если вам нужны полные данные, просто удалите это.

redirects= Устранить проблемы с перенаправлением.

Ответ 5

DBPedia - идеальное решение этой проблемы. Здесь: http://dbpedia.org/page/Metallica, посмотрите на отлично организованные данные, используя RDF. Можно запросить что-нибудь здесь, http://dbpedia.org/sparql с использованием языка запросов SPARQL для языка RDF. Всегда есть способ найти идентификатор страницы, чтобы получить описательный текст, но это должно быть сделано по большей части.

Будет существовать кривая обучения для RDF и SPARQL для написания любого полезного кода, но это идеальное решение.

Например, запрос, выполняемый для Metallica, возвращает таблицу HTML с рефератом на нескольких разных языках:

<table class="sparql" border="1">
  <tr>
    <th>abstract</th>
  </tr>
  <tr>
    <td><pre>"Metallica is an American heavy metal band formed..."@en</pre></td>
  </tr>
  <tr>
    <td><pre>"Metallica es una banda de thrash metal estadounidense..."@es</pre></td>
... 

SPARQL QUERY:

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbres: <http://dbpedia.org/resource/>

SELECT ?abstract WHERE {
 dbres:Metallica dbpedia-owl:abstract ?abstract.
}

Измените "Metallica" на любое имя ресурса (имя ресурса, как в wikipedia.org/resourcename) для запросов, относящихся к абстрактным.

Ответ 6

Я думаю, что лучшим вариантом является использование поддержки extracts, которая предоставляет вам MediaWiki API. Он возвращает вам только теги (b, i, h #, span, ul, li) и удаляет таблицы, инфобоксы, ссылки и т.д.

http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Bla%20Bla%20Bla&format=xml дает вам что-то очень простое:

<api><query><pages><page pageid="4456737" ns="0" title="Bla Bla Bla"><extract xml:space="preserve">
<p>"<b>Bla Bla Bla</b>" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, <i>L'Amour Toujours</i>. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with <i>L'Amour Toujours (I'll Fly With You)</i> in its US radio version.</p> <p></p> <h2><span id="Background_and_writing">Background and writing</span></h2> <p>He described this song as "a piece I wrote thinking of all the people who talk and talk without saying anything". The prominent but nonsensical vocal samples are taken from UK band Stretch song <i>"Why Did You Do It"</i>.</p> <h2><span id="Music_video">Music video</span></h2> <p>The song also featured a popular music video in the style of La Linea. The music video shows a man with a floating head and no arms walking toward what appears to be a shark that multiplies itself and can change direction. This style was also used in "The Riddle", another song by Gigi D'Agostino, originally from British singer Nik Kershaw.</p> <h2><span id="Chart_performance">Chart performance</span></h2> <h2><span id="References">References</span></h2> <h2><span id="External_links">External links</span></h2> <ul><li>Full lyrics of this song at MetroLyrics</li> </ul>
</extract></page></pages></query></api>

Затем вы можете запустить его через регулярное выражение, в JavaScript будет что-то вроде этого (возможно, вам нужно сделать некоторые незначительные изменения:

/^.*<\s*extract[^>]*\s*>\s*((?:[^<]*|<\s*\/?\s*[^>hH][^>]*\s*>)*).*<\s*(?:h|H).*$/.exec(data)

Это дает вам (только парагрфы, жирный и курсив):

" Bla Bla Bla" - это название песни, написанной и записанной итальянским диджеем Джиги Д'Агостино. Он был выпущен в мае 1999 года в качестве третьего сингла с альбома L'Amour Toujours. Он достиг 3-го места в Австрии и № 15 во Франции. Эта песня также может быть услышана в добавленном ремикс-мэшапе с L'Amour Toujours (я буду летать с вами) в своей версии радиостанции в США.

Ответ 7

"... a script, который получает только раздел описания Википедии..."

Для вашего приложения вы можете посмотреть на дампы, например: http://dumps.wikimedia.org/enwiki/20120702/

Конкретными файлами, которые вам нужны, являются "абстрактные" XML файлы, например, этот маленький (22,7 МБ):

http://dumps.wikimedia.org/enwiki/20120702/enwiki-20120702-abstract19.xml

В XML есть тег, называемый "абстрактным", который содержит первую часть каждой статьи.

В противном случае wikipedia2text использует, например, w3m для загрузки страницы с расширением и форматированием шаблонов. Из этого вы могли бы выбрать абстрактный текст с помощью регулярного выражения.

Ответ 9

Вы можете попробовать библиотеку раскраски HTML BeautifulSoup для python, но вам придется написать простой парсер.

Ответ 10

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