【问题标题】:Parse HTML file using Perl使用 Perl 解析 HTML 文件
【发布时间】:2015-12-02 14:38:08
【问题描述】:

我正在尝试使用 perl 提取此 html 文件中的表格。

我试过这个:

my $te = HTML::TableExtract->new();
$te->parse_file($g_log);
print "=====TE: $te ======\n";

输出是:

HTML:TableExtract = Hash(0x266f5f)

我尝试遍历 $te 并没有找到任何东西。任何人都可以指导下一步做什么。我是新手。

这是 HTML 文件:

    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:math="http://exslt.org/math"
          xmlns:testng="http://testng.org">
       <head xmlns="">
          <title>TestNG Results</title>
          <meta http-equiv="content-type" content="text/html; charset=utf-8"></meta>
          <meta http-equiv="pragma" content="no-cache"></meta>
          <meta http-equiv="cache-control" content="max-age=0"></meta>
          <meta http-equiv="cache-control" content="no-cache"></meta>
          <meta http-equiv="cache-control" content="no-store"></meta>
          <LINK rel="stylesheet" href="style.css"></LINK>
          <script type="text/javascript" src="main.js"></script>
       </head>
       <body>
          <h2>Test suites overview</h2>


<table width="100%">
                 <tr>
                    <td align="center" id="chart-container"><script type="text/javascript">
                                            renderSvgEmbedTag(600, 200);
                                        </script></td>
                 </tr>
              </table>

   </body>
  </html>

【问题讨论】:

    标签: html perl parsing


    【解决方案1】:
    #!/usr/bin/perl
    #use strict;
    use warnings;
    use HTML::TableExtract;
    my $filename = "testfile.html";
    my $te = HTML::TableExtract->new();
    $te->parse_file($filename);
    foreach $ts ($te->tables) {
       print "Table found at ", join(',', $ts->coords), ":\n";
       foreach $row ($ts->rows) {
          print "   ", join(',', @$row), "\n";
       }
    }
    

    请注意,HTML::TableExtract 也可以在 'tree' mode 中调用,其中生成的 HTML 和提取的表格在 HTML::Element 树结构中编码。

    use HTML::TableExtract 'tree';

    【讨论】:

    • 我尝试了编写的代码并且它有效。确保 HTML 文件的路径正确。
    • 加 1 好。 @ChankeyPathak
    【解决方案2】:

    不知道你想从表中得到什么。但我强烈建议使用数据转储器来查看哈希内部。

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use HTML::TableExtract;
    use Data::Dumper;
    
    my $html = <<'EOT';
    <html xmlns="http://w...content-available-to-author-only...3.org/1999/xhtml" xmlns:math="http://e...content-available-to-author-only...t.org/math"
              xmlns:testng="http://t...content-available-to-author-only...g.org">
           <head xmlns="">
              <title>TestNG Results</title>
              <meta http-equiv="content-type" content="text/html; charset=utf-8"></meta>
              <meta http-equiv="pragma" content="no-cache"></meta>
              <meta http-equiv="cache-control" content="max-age=0"></meta>
              <meta http-equiv="cache-control" content="no-cache"></meta>
              <meta http-equiv="cache-control" content="no-store"></meta>
              <LINK rel="stylesheet" href="style.css"></LINK>
              <script type="text/javascript" src="main.js"></script>
           </head>
           <body>
              <h2>Test suites overview</h2>
    
    
    <table width="100%">
                     <tr>
                        <td align="center" id="chart-container"><script type="text/javascript">
                                                renderSvgEmbedTag(600, 200);
                                            </script></td>
                     </tr>
                  </table>
    
        </table>
       </body>
      </html>
    EOT
    
    my $te = HTML::TableExtract->new();
    $te->parse($html);
    
    print Dumper($te);
    

    【讨论】:

    • 谢谢!我通过转储器看到了数据,我看到了这个:'_tables' => {}
    猜你喜欢
    • 2011-10-10
    • 2016-07-31
    • 2013-03-17
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多