Попытка прочитать значение в xpath - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь получить значение школьного округа, указанного на этом сайте: http://gis.nyc.gov/dcp/at/f1.jsp?submit=true&house_nbr=310&street_name=Lenox+Avenue&boro=1

Я использовал Firebug, чтобы получить XPath этого значения: / HTML / тело / стол / TBODY / тр [2] / TD / стол / TBODY / TR / TD [2] / стол / TBODY / TR / TD / стол / TBODY / тр [3] / TD / стол / TBODY / тр [2] / тд [2] / стол / TBODY / тр [2] / TD / стол / TBODY / тр [10] / тд [2]

И хотел бы прочитать это с помощью Perl. Я написал следующий код:

#!/usr/bin/perl -w

use HTML::TreeBuilder::XPath;
use Data::Dumper;

my $tree= HTML::TreeBuilder::XPath->new;

$tree->parse_file("test.html");

my @nb=$tree->findvalue( '/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr[3]/td/table/tbody/tr[2]/td[2]/table/tbody/tr[2]/td/table/tbody/tr[10]/td[2]');

print Dumper(@nb);

Но он просто возвращает $VAR1 = '';.

Любые предложения. Чтобы запустить его, я просто скопировал исходный код с веб-страницы в test.html.

Спасибо!

1 Ответ

3 голосов
/ 12 октября 2011

Начальный тег некоторых элементов HTML (HTML, HEAD, BODY и TBODY) не является обязательным.Взгляните на

...<table><tr><td>Foo</td></tr></table>...

Согласно HTML, в этом фрагменте представлено четыре элементов:

TABLE
   TBODY
      TR
         TD

Firefox создает все четыре элемента, поэтому он даетследующий xpath для элемента TD:

.../table/tbody/tr/td

HTML :: TreeBuilder, вероятно, не создает элементы, когда их начальные теги опущены, поэтому он создает только три элемента для этого фрагмента:

TABLE
   TR
      TD

Вам понадобится следующий xpath, чтобы найти элемент TD:

.../table/tr/td

Могу поспорить, вы найдете результаты, если уберете тесты tbody изваш xpath, так как элементы TBODY, скорее всего, не найдены в файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...