Поскольку это HTML, вы, вероятно, хотите, чтобы модуль XPath был создан для работы с HTML, HTML :: TreeBuilder :: XPath .
Сначала вам нужно проанализировать вашу строку, используя методы HTML :: TreeBuilder. Предполагая, что содержимое вашей веб-страницы находится в переменной с именем $content
, сделайте это следующим образом:
my $tree = HTML::TreeBuilder->new;
$tree->parse_file($file_name);
Теперь вы можете использовать выражения XPath для получения итераторов по интересующим вас узлам. Это первое выражение получает все td
узлы, которые находятся в tr
в table
в body
в html
элементе:
my $tdNodes = $tree->findnodes('/html/body/table/tr/td');
Наконец, вы можете просто перебрать все узлы в цикле, чтобы найти то, что вы хотите:
foreach my $node ($tdNodes->get_nodelist) {
my $data = $node->findvalue('.'); // the content of the node
print "$data\n";
}
См. Документацию HTML :: TreeBuilder для получения дополнительной информации о его методах и документацию NodeSet для использования объекта результата NodeSet. У w3schools есть проходимое руководство по XPath здесь .
При всем этом вы сможете выполнять довольно надежный анализ HTML, чтобы получить любой элемент, который вы хотите. Вы даже можете указать классы, идентификаторы и многое другое в своих запросах XPath, чтобы точно определить, какие узлы вы хотите. По моему мнению, синтаксический анализ HTML с использованием этой модифицированной библиотеки XPath намного быстрее и более удобен, чем работа с кучей одноразовых регулярных выражений.