Получить первый абзац (и только текст) статьи из Википедии возвращает нежелательный результат
Я пытаюсь получить первый абзац текста для статьи из Википедии, UNIX в этом примере, но он возвращает мне нежелательный вывод.
Для того, что я читал в API Википедии и здесь, в Stackru, это URL запроса для совершения вызова:
Мой ожидаемый результат будет:
Unix (официально известный как UNIX, иногда также пишется как Unix в небольших заглавных буквах) - это многозадачная многопользовательская компьютерная операционная система, изначально разработанная группой сотрудников AT&T в Bell Labs, в том числе Кеном Томпсоном, Деннисом Ричи, Брайаном Керниганом, Дуглас Макилрой, Майкл Леск и Джо Оссанна.[1] Операционная система Unix была впервые разработана на ассемблере, но к 1973 году была почти полностью перекодирована в C, что значительно облегчило ее дальнейшее развитие и портирование на другое оборудование. Сегодняшняя эволюция системы Unix разделена на различные отрасли, которые со временем разрабатываются AT&T, а также различными коммерческими поставщиками, университетами (такими как Калифорнийский университет, BSD Беркли) и некоммерческими организациями.
Мой текущий результат:
{{Use dmy dates|date=August 2012}}
{{Infobox OS
|name = Unix
|logo =
|screenshot = [[File:Unix history-simple.svg|250px]]
|caption = Evolution of Unix and Unix-like systems
|website = [http://www.unix.org unix.org]
|developer = [[Ken Thompson (computer programmer)|Ken Thompson]], [[Dennis Ritchie]], [[Brian Kernighan]], [[Douglas McIlroy]], and [[Joe Ossanna]] at [[Bell Labs]]
|source_model = Historically [[Closed source software|closed source]], now some Unix projects ([[Berkeley Software Distribution|BSD]] family and [[Illumos]]) are [[open source]]d.
|frequently_updated = yes <!-- Release version update? Don't edit this page, just click on the version number! -->
|programmed_in = [[C (programming language)|C]]
|kernel_type = [[Monolithic Kernel|Monolithic]]
|ui = [[Command-line interface]] & [[Graphical user interface|Graphical]] ([[X Window System]])
|language = English
|family = Unix
|released = {{start date and age|df=yes|1969}}
|license = [[Proprietary software|Proprietary]]
|working_state = Current
}}
'''Unix''' (officially trademarked as '''UNIX''', sometimes also written as '''<span style="font-variant: small-caps;">Unix</span>''' in small caps) is a [[Computer multitasking|multitasking]], [[multi-user]] computer [[operating system]] originally developed in 1969 by a group of [[American Telephone & Telegraph|AT&T]] employees at [[Bell Labs]], including [[Ken Thompson]], [[Dennis Ritchie]], [[Brian Kernighan]], [[Douglas McIlroy]], [[Michael Lesk]] and [[Joe Ossanna]].<ref name=" Ritchie">{{cite journal
| last = Ritchie
| first = D.M.
| authorlink =
| coauthors = Thompson, K.
| title = The UNIX Time-Sharing System
| journal = Bell System Tech. J.
| volume = 57
| issue = 6
| pages = 1905-1929
| publisher = American Tel. & Tel.
| location = USA
| date = July 1978
| url = http://www.alcatel-lucent.com/bstj/vol57-1978/articles/bstj57-6-1905.pdf
| issn =
| doi =
| id =
| accessdate = December 9, 2012}}</ref> The Unix operating system was first developed in [[assembly language]], but by 1973 had been almost entirely recoded in [[C (programming language)|C]], greatly facilitating its further development and [[Software portability|porting]] to other hardware. Today's Unix system evolution is split into various branches, developed over time by AT&T as well as various commercial vendors, universities (such as [[University of California, Berkeley]]'s [[BSD]]), and [[non-profit]] organizations.
[[The Open Group]], an industry standards consortium, owns the UNIX trademark. Only systems fully compliant with and certified according to the [[Single UNIX Specification]] are qualified to use the trademark; others might be called ''Unix system-like'' or ''[[Unix-like]]'', although the Open Group disapproves<ref>[http://www.unix.org/questions_answers/faq.html#7a What is a "Unix-like" operating system?] Unix.org FAQ</ref> of this term. However, the term ''Unix'' is often used informally to denote any operating system that closely resembles the trademarked system.
During the late 1970s and early 1980s, the influence of Unix in academic circles led to large-scale adoption of Unix (particularly of the [[Berkeley Software Distribution|BSD]] variant, originating from the [[University of California, Berkeley]]) by commercial startups, the most notable of which are [[Solaris (operating system)|Solaris]], [[HP-UX]], [[Sequent Computer Systems|Sequent]], and [[AIX operating system|AIX]], as well as [[Darwin (operating system)|Darwin]], which forms the core set of components upon which [[Apple Inc.|Apple]]'s [[OS X]], [[Apple TV]], and [[IOS (Apple)|iOS]] are based.<ref>{{cite web|url=http://marketshare.hitslink.com/operating-system-market-share.aspx?qprid=8&qpcustomd=0 |title=Operating system market share |publisher=Marketshare.hitslink.com |date= |accessdate=2012-08-22}}</ref><ref>{{cite web|url=http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/OSX_Technology_Overview/SystemTechnology/SystemTechnology.html#//apple_ref/doc/uid/TP40001067-CH207-BCICAIFJ |title=Loading |publisher=Developer.apple.com |date= |accessdate=2012-08-22}}</ref> Today, in addition to certified Unix systems such as those already mentioned, [[Unix-like]] operating systems such as [[MINIX]], [[Linux]], and [[BSD]] descendants ([[FreeBSD]], [[NetBSD]], [[OpenBSD]], and [[DragonFly BSD]]) are commonly encountered. The term ''traditional Unix'' may be used to describe an operating system that has the characteristics of either [[Version 7 Unix]] or [[UNIX System V]]."
Как правильно найти статью?
Заранее спасибо!
4 ответа
Если вы хотите использовать только простой текст, используйте TextExtracts: http://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&explaintext=1&titles=Unix
Это даст: Unix is a multitasking, multi-user computer operating system that exists in many variants. The original Unix was developed at AT&T's Bell Labs research center by Ken Thompson, Dennis Ritchie, and others. From the power user's or programmer's perspective, Unix systems are characterized by a modular design that is sometimes called the "Unix philosophy," meaning the OS provides a set of simple tools that each perform a limited, well-defined function, with a unified filesystem as the main means of communication and a shell scripting and command language to combine the tools to perform complex workflows.
Попробуйте этот URL.
(Примечание: pagename - это страница, которую вы запрашиваете)
Но это возвращает кучу дерьма html... вы можете отфильтровать hml следующим образом:
$.getJSON("http://en.wikipedia.org/w/api.php?"+"action=parse&format=json&prop=text§ion=all&page=" + entry + "&redirects&callback=?", function(data)
{
if (!data.error)
{
var markup = data.parse.text["*"];
if (typeof markup !== "undefined")
{
$("#entry").text(entry).show();
var blurb = $('<div id="articleText"></div>').html(markup);
// remove links as they will not work
blurb.find('a').each(function() { $(this).replaceWith($(this).html()); });
// remove any references
blurb.find('sup').remove();
// remove cite error
blurb.find('.mw-ext-cite-error').remove();
$('#article').html($(blurb).find('p'));
$("#article").append(link);
// console.log(markup);
}
}
});
Вы можете прочитать больше здесь
Я хотел бы проверить расширение MobileFrontend, оно по крайней мере даст вам несколько <p>
работать с. Использование http://en.wikipedia.org/w/api.php?format=json&action=mobileview&page=Unix§ions=0&prop=text|sections дает
{"MobileView":{"секции":[{"ID":0,"текст":"\nUnix\ п \ п
\ n Эволюция Unix и Unix-подобных систем \ n \ n \ n \ n Компания / разработчик \ n Кен Томпсон, Деннис Ричи, Брайан Керниган, Дуглас Макилрой и Джо Оссанна в Bell Labs\n\n\n Программируется на \nC и языке ассемблера \n\n\nOS семейство \nUnix\n\n\n Рабочее состояние \ n Текущие \ n \ n \ n Система источника \ n Исторически закрытый источник, теперь некоторые проекты Unix (семейство BSD и Illumos) имеют открытый исходный код.\n\n\nInitial выпуск от 20 апреля 1969 года; 44 года назад (20 апреля 1969 г.)\n\n\n Доступный язык (языки)\nEnglish\n\n\n Тип ядра \ n Монолитический \ n \ n \ n Стандартный пользовательский интерфейс \ n Командный интерфейс и графический интерфейс (X Window System)\n\n\nLicense\n Принадлежащий \ n \ n \ n Официальный веб-сайт \ nhttp: //www.unix.org \ "> unix.org \ n \ n \ nUnix (официально известный как UNIX, иногда также пишется как Unix в маленьких заглавных буквах) - многозадачная многопользовательская операционная система, изначально разработанная группой в 1969 году.
(Надрез)
Вы должны были бы взять это и разобрать это другим способом (perl, bash, что угодно), но в этот момент вы могли бы также отказаться от API и пойти на некоторые curl
или же wget
действие, которое сделало бы это легким.
Я занимался этим в Python. Первая задача - получить нужный текст; после этого вам нужно разобрать HTML и удалить всю постороннюю информацию.
Следующая функция даст вам n-ную секцию текста (n=0 возвращает реферат):
import requests
def getWikiSection(topic, n):
url = 'http://en.wikipedia.org/w/api.php?action=parse&page=%s&format=json&prop=text§ion=%s' % (topic, str(n))
json_response = requests.get(url).json().items()
if len(json_response) > 1 and json_response[1][0] == u'error':
print json_response[1][1][u'info']
return None
return stripTags(json_response[0][1][u'text'][u'*'])
Краткое руководство: сначала мы создаем URL для данной темы; затем мы получаем ответ JSON; если мы запросили недопустимый раздел или тему (т. е. для этой темы не существует страницы или мы вышли за пределы длины страницы), мы печатаем ошибку; иначе мы убираем ответ.
Очистка ответа обрабатывается функцией 'stripTags' в последней строке, которая удаляет теги HTML. Вот:
from HTMLParser import HTMLParser
class MLStripper(HTMLParser):
def __init__(self):
self.reset()
self.fed = []
def handle_data(self, d):
self.fed.append(d)
def get_data(self):
return ''.join(self.fed)
def stripTags(html):
s = MLStripper()
s.feed(html)
return s.get_data()
Конечно, это может быть расширено для разбора текста, как вам нравится. Например, я удалил цитаты следующим образом:
import re
def removeReferences(s):
return re.sub(r'\[[0-9]+\]', '', s)
Надеюсь это поможет.