Этот вопрос немного сложен для понимания, но я сделаю все возможное, чтобы объяснить его.Во-первых, позвольте мне представить пример страницы:
http://en.wikipedia.org/wiki/African_bush_elephant
Это страница википедии, в частности, страница спецификаций, так как она имеет «Taxobox» справа.Я пытаюсь проанализировать атрибуты в этом таксобоксе с помощью PHP.В Википедии есть два способа создания такого таксобокса: вручную или с помощью специального шаблона "auto taxobox".
Я могу разобрать ручной.Я использую API Википедии для возврата содержимого страницы в формате json, затем я использую некоторые регулярные выражения для получения этих свойств.
В случае автоматического таксокса, однако, возвращаемое содержимое выглядит следующим образом:
> {{automatic taxobox | name = African Bush Elephant<ref
> name=MSW3>{{MSW3 Proboscidea | id = 11500009 | page =
> 91}}</ref> | status = VU | status_system = iucn3.1 | status_ref
> = <ref name=IUCN>{{IUCN2010|assessors=Blanc, J.|year=2008|version=2010.1|id=12392|title=Loxodonta
> africana|downloaded=04 April 2010}}</ref> | trend = unknown |
> image = African Bush Elephant.jpg | taxon = Loxodonta africana |
> synonyms = ''Loxodonta africana africana'' | binomial = ''Loxodonta
> africana'' | binomial_authority = ([[Johann Friedrich
> Blumenbach|Blumenbach]], 1797) }}
Если бы вы сравнили это с реальной страницей, как вы видели бы ее в Википедии,вы заметите, что некоторые атрибуты отсутствуют.Например, свойство «Королевство» отображается на реальной странице, но не возвращается сюда.Больше таких свойств не хватает.
Это похоже на то, что шаблону нужна команда на стороне сервера Википедии для преобразования шаблона в реальный вывод.Я узнал, что в API есть действие "expandtemplates", которое вы можете отправить фрагментом, подобным приведенному выше, и вы получите результаты, возвращенные так, как их увидит пользователь.Я использую это для нескольких шаблонов, и это работает, но, к сожалению, не для шаблона автоматического таксобокса.Нажмите на эту ссылку, чтобы увидеть, что возвращает expandtemplates:
полная ссылка
Как видите, шаблон на самом деле не расширяется.Вместо этого он показывает больше шаблонов, вложенных и повторенных несколько раз.
Итак, я застрял, пытаясь прочитать эти свойства со страниц, имеющих шаблон автоматического таксобокса.Единственное другое направление, которое я могу придумать, - это не использовать API и просто анализировать HTML-код реальной страницы.Это было бы выполнимо для некоторых свойств, но другие чрезвычайно хрупки для анализа.