HTML::TreeBuilder каким-то образом объединяет все элементы таблицы, вложенные в тег BODY?

Я пытался проанализировать содержимое какой-либо веб-страницы, используя HTML::TreeBuilder, а затем выполнить ручную XPath-подобную прогулку.

Но я получил кое-что действительно странное.

Это X-Path, созданный с веб-страницы Chrome Developer Tools:

/html/body/table/tbody/tr/td[1]/table[3]/tbody/tr[1]/td[2]/
table[1]/tbody/tr[1]/td[2]/**table[9]** 

Эта последняя внутренняя таблица № 9 - это то, что мне нужно, в частности, ячейка с текстом "кликни для просмотра".

Вот скриншот инструментов разработчика - обратите внимание, что под тегом BODY находится только одна таблица:

И если вы углубитесь в этот XPath, вы увидите элемент, который я ищу (обратите внимание, что это действительно вложенная таблица в таблице внутри таблицы - я включил элемент TD, который ищу):




ОДНАКО, это то, что HTML::TreeBuilder производит вместо этого (в основном, <body> тег, содержащий 22 тега под ним, большинство из которых <table> теги:

  DB<16>  x $tree->tag
0  'body'

  DB<17>  x map {$_->tag} $tree->content_list
0  'table'
1  'table'
2  'table'
3  'table'
4  'table'
5  'table'
6  'table'
7  'table'
8  'table'
9  'table'
10  'table'
11  'table'
12  'table'
13  'table'
14  'table'
15  'table'
16  'table'
17  'table'
18  'table'
19  'script'
20  'table'
21  'table'

И, как вы можете видеть, восьмая таблица под тегом BODY TAG содержит элемент, который я хочу

  DB<37> foreach my $c (0 .. $tree->content_list-1) { 
           if (($tree->content_list)[$c]->as_HTML =~ /click to view/)
              {print $c+1}}
9

1 ответ

Скорее всего, обрабатываемая вами страница содержит недопустимый HTML. В этой ситуации открыт сезон, когда этот контент должен быть представлен, и разное программное обеспечение будет делать разные выборы.

Боюсь, что вы ничего не можете с этим поделать, кроме обработки HTML без помощи парсера, или, возможно, поиска ошибки и ее исправления до того, как вы ее исправите. HTML::TreeBuilder, Ни один из них не очень приятная перспектива.

Другие вопросы по тегам