Я все еще придерживаюсь своей проблемы, пытаясь разобрать статьи из Википедии. На самом деле, я хочу разобрать секцию статей из Википедии, то есть в моей заявке есть ссылки на страны и на каждой странице страны, на которой я хотел бы показать инфобокс, который находится в соответствующей статье википедии этой страны. Я использую php здесь – я был бы очень признателен, если у кого-нибудь есть фрагменты кода или советы о том, что я должен делать здесь.
Еще раз спасибо.
РЕДАКТИРОВАТЬ
Ну, у меня есть таблица db с названиями стран. И у меня есть сценарий, который берет страну и показывает ее детали. Я хотел бы захватить инфобокс – синюю коробку со всеми изображениями деталей страны и т. Д., Так как она из википедии и показать ее на моей странице. Я хотел бы знать действительно простой и простой способ сделать это – или иметь сценарий, который просто загружает информацию инфобокса в локальную удаленную систему, к которой я мог бы получить доступ позже. Я имею в виду, что я открыт для идей здесь, за исключением того, что конечный результат, который я хочу, это увидеть инфобокс на моей странице – конечно, с небольшим содержанием по ссылке Википедии внизу 🙂
РЕДАКТИРОВАТЬ
Я думаю, что нашел то, что искал на http://infochimps.org – у них было множество наборов данных, я думаю, язык YAML. Я могу использовать эту информацию прямо, как есть, но мне нужен способ постоянно обновлять эту информацию из Википедии, но я считаю, что инфобокс редко меняется, особенно в странах, если какая-либо нация не решит изменить свою столицу или так.
Я предлагаю выполнить WebRequest против wikipedia. Оттуда у вас будет страница, и вы можете просто проанализировать или запросить данные, которые вам нужны, с помощью регулярного выражения, обхода персонажа или другой формы, с которой вы знакомы. По существу скрипит экран!
EDIT – я бы добавил к этому ответу, что вы можете использовать HtmlAgilityPack для тех, кто находится на C # land. Для PHP это выглядит как SimpleHtmlDom. Сказав, что похоже, что у Википедии есть более чем адекватный API. Этот вопрос, вероятно, лучше всего отвечает вашим потребностям:
Есть ли API Википедии?
Я бы использовал API википедии (wikimedia). Вы можете вернуть данные в формате JSON, XML, php и других. Затем вам нужно будет разобрать полученную информацию для извлечения и форматирования информации, которую вы хотите, но информация о начале, остановке и типах информационных полей понятна.
Запустите свой запрос только для rvsection = 0, так как в этом первом разделе вы получите материал до первого раздела, включая инфобокс. Затем вам нужно проанализировать содержимое инфобокса, которое не должно быть слишком сложным. См. En.wikipedia.org/w/api.php для официальной документации по википедии api и http://www.mediawiki.org/wiki/API для руководства.
Запустите, например, запрос: http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=fortran&rvsection=0
Я предлагаю вам вместо этого использовать DBPedia, которая уже сделала работу по превращению данных в википедию в удобные, сменные, открытые формы.
Это зависит от того, какой маршрут вы хотите отправиться. Вот несколько возможностей:
Не используйте только последнюю версию текущей страницы и повторите разбор каждого раза, когда ваше приложение захочет использовать эту коробку. Это огромная трата ресурсов как для вас, так и для Викимедиа.
Существует ряд поставщиков семантических данных, из которых вы можете извлекать структурированные данные вместо того, чтобы пытаться вручную его проанализировать:
DbPedia – как уже упоминалось, обеспечивает конечную точку SPARQL, которая может использоваться для запросов данных. Существует множество библиотек, доступных для нескольких платформ, включая PHP.
Freebase – другой поставщик данных общего доступа. Первоначальный набор данных основан на проанализированных данных Википедии, но есть некоторая информация, взятая из других источников. Набор данных может быть отредактирован кем угодно, и, в отличие от Википедии, вы можете добавить свои собственные данные в свое собственное пространство имен с помощью специальной схемы. Использует собственный язык запросов MQL, основанный на JSON. У данных есть ссылки WebID для соответствия статей Википедии. Свободное основание также предоставляет количество загружаемых дампов данных. В Freebase есть несколько клиентских библиотек, включая PHP.
Geonames – база данных географических местоположений. Имеет API, который предоставляет информацию о стране и регионе для данных координат, близлежащих мест (например, город, железнодорожная станция и т. Д.),
Opensteetmap – построенная сообществом карта мира. Имеет API, позволяющий запрашивать объекты по местоположению и типу.
Wikimapia API – еще одна служба определения местоположения
Чтобы загрузить анализируемый первый раздел, просто добавьте этот параметр в конец api url
rvparse
Затем проанализируйте html, чтобы получить таблицу infobox (используя Regex)
$url = "http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=Niger&rvsection=0&rvparse"; $data = json_decode(file_get_contents($url), true); $data = current($data['query']['pages']); $regex = '#<\s*?table\b[^>]*>(.*)</table\b[^>]*>#s'; $code = preg_match($regex, $data["revisions"][0]['*'], $matches); echo($matches[0]);
если вы хотите разобрать один раз все статьи, wikipedia имеет все статьи в формате xml,
http://en.wikipedia.org/wiki/Wikipedia_database
в противном случае вы можете скручивать отдельные статьи, например