【发布时间】:2021-06-23 18:53:32
【问题描述】:
我在 html 结果页面中有数据,我想迭代地解析出其中的数据集。在一般的“结果页”格式中,有一个主要的结果部分(div),其中包含一堆子部分(sub divs),这些子部分又包含带有结果数据的各种标签。
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 选择器(和其他方法)我可以将两种方法的结果限制为唯一的项目(我确实这样做了)。但是,我的知识到此为止。
我能够一次找到一种类型的所有标签。但数据很复杂,事后无法关联结果。
我还能够抓取一个小节,并收集我需要的数据集,但我不知道如何创建一个遍历所有小节的循环。
这一切都错了吗?
【问题讨论】:
标签: parsing dom web-scraping mojo