У меня есть данные на странице результатов html, и я хочу итеративно анализировать наборы данных из нее. В общем формате страницы результатов есть основной раздел результатов (div), который содержит кучу подразделов (sub div), которые в свою очередь содержат различные теги с данными результатов.
Faux, pseudo, not-real code
$file = Mojo::File->new('BigData.htm'); # Read in some file
$dom = Mojo::DOM->new($file->slurp); # Slurp the dom out of it
#
$rs = $dom->at('div.resultsSection'); # Find the beginning of the results section
#
for my $ss ($rs->at('div.subSection') { # Start looping through the subsections
#
$cs = $ss->find('p.coolStuff'); # Find correlating data
$is = $ss->find('div.importantStuff'); #
#
if(! defined $is) { # Make decisions based on data availability
$is = $ss->find('div.differentClass'); # and data quality
} #
push (@array, "$cs\t$is\n"); # Reformat it for my purposes
} #
Ясно, что фальшивый, псевдо, ненастоящий код выше полностью фальшивый во всех смыслах, кроме одного: это логическое представление того, что я пытаюсь сделать. -›at() должен возвращать объект dom, который начинается с первого вхождения заданного тега. -›find() возвращает набор совпадающих тегов. Я понимаю, что с помощью селекторов css (и других методов) я могу ограничить результаты обоих методов уникальными элементами (и я это делаю). Однако на этом мои знания заканчиваются.
Я могу найти все теги одного типа за раз. Но данные сложны, и нет возможности впоследствии сопоставить результаты.
Я также могу захватить один подраздел и собрать нужный мне набор данных, но я не могу понять, как создать цикл, который проходит через все подразделы.
Я все делаю неправильно?