HTML :: TreeBuilder是否以某种方式将所有嵌套在BODY标记下的表元素拼凑在一起?

时间:2013-11-24 00:45:33

标签: perl html-parsing html-treebuilder

我试图使用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标记下只有一个表:

enter image description here

如果你深入了解那个XPath,你会看到我寻找的元素(注意它是表格中表格中真正嵌套的表格 - 我包含了我寻找的TD元素):

enter image description here




但是,这就是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

1 个答案:

答案 0 :(得分:0)

您处理的网页很可能包含无效的HTML。在那种情况下,关于内容应该如何实际呈现的开放季节,不同的软件将做出不同的选择。

除了在没有解析器帮助的情况下处理HTML,或者在通过HTML::TreeBuilder之前找到错误并修复错误之外,我担心除了它之外你无能为力。这些都不是一个非常令人愉快的前景。