我试图使用 HTML::TreeBuilder 解析一些网页的内容,然后进行类似 XPath 的手动遍历。
但我得到了一些非常奇怪的东西。
这是 Chrome 的开发者工具从网页生成的 X-Path:
/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 下的第 8 个表包含我想要的元素
DB<37> foreach my $c (0 .. $tree->content_list-1) {
if (($tree->content_list)[$c]->as_HTML =~ /click to view/)
{print $c+1}}
9