我试图使用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
答案 0 :(得分:0)
您处理的网页很可能包含无效的HTML。在那种情况下,关于内容应该如何实际呈现的开放季节,不同的软件将做出不同的选择。
除了在没有解析器帮助的情况下处理HTML,或者在通过HTML::TreeBuilder
之前找到错误并修复错误之外,我担心除了它之外你无能为力。这些都不是一个非常令人愉快的前景。