Perl HTML :: TableExtract получить раздетый текст - PullRequest
1 голос
/ 19 июля 2011

Строки моих таблиц в HTML выглядят следующим образом:

<TR bgcolor="#FFFFFF" onmouseover="this.bgColor='#DBE9FF';" onmouseout="this.bgColor='#FFFFFF';">
   <TD  class="dlfont">07/01/2011 10:33 AM EDT</B>&nbsp;</TD>
   <TD  class="dlfont">DRB</B>&nbsp;</TD><TD  class="dlfont">Blah</B>&nbsp;</TD>
   <TD  class="dlfont">PPD</B>&nbsp;</TD><TD  class="dlfont"> </B>&nbsp;</TD>
   <TD  class="dlfont">07/01/2011</B>&nbsp;</TD>
   <TD width=50 align=center><A HREF="javascript:parent.nav.details('0701201110:33AMEDTDRBPPD')"><IMG border='0' src='/images/view.gif' height=10 width=19></A></TD>
</TR>


<TR bgcolor="#EEEEEE" onmouseover="this.bgColor='#DBE9FF';" onmouseout="this.bgColor='#EEEEEE';">
    <TD  class="dlfont">07/01/2011 10:33 AM EDT</B>&nbsp;</TD>
    <TD  class="dlfont">WHPSF</B>&nbsp;</TD>
    <TD  class="dlfont">Blah</B>&nbsp;</TD>
    <TD  class="dlfont"> </B>&nbsp;</TD>
    <TD  class="dlfont"> </B>&nbsp;</TD>
    <TD  class="dlfont">07/01/2011</B>&nbsp;</TD>  
    <TD width=50 align=center><A HREF="javascript:parent.nav.details('0701201110:33AMEDTWHPSF')"><IMG border='0' src='/images/view.gif' height=10 width=19></A></TD>
</TR>

Когда я извлекаю строки, используя HTML :: TableExtract, дополнительные символы </B>&nbsp; также появляются в конце и образуют какой-то специальный символ. Как мне от этого избавиться?

1 Ответ

1 голос
/ 19 июля 2011

Я хотел бы иметь в виду две вещи при использовании HTML :: TableExtract с плохо отформатированным HTML в вашем вопросе

  1. используйте keep_html=>1 в конструкторе HTML :: TableExtract
  2. используйте регулярное выражение для тщательного удаления </B>&nbsp;,

Вот некоторый код на Perl, который я написал для удаления </B>&nbsp; из ячеек таблицы, но учтите, что это может изменить правильно отформатированный HTML на плохо отформатированный HTML, если вы будете слепо применять его во всех случаях.

#!/usr/bin/perl

use strict;
use warnings;
use HTML::TableExtract;

my($f) = @ARGV;
open F,$f;
my $html = join '',<F>;
close F;

### your html didn't include headers, so I added a first table row with td text, time a b c d e f, to help HTML::TableExtract find the table in file, $f 
my $te = HTML::TableExtract->new(
    keep_html=>1,
    headers=>[qw/ time a b c d e f/]);

$te->parse($html);

for my $ts($te->tables)
{
    print "Table(",join(',',$ts->coords),":\n";
    for my $row ($ts->rows)
    {
        for my $cell (@$row)
        {
            next unless $cell;
                    ## maybe add $ at end of regex or other test here to make sure valid cases of <B>...</B>&nbsp; are not affected
            $cell =~ s/<\/B>&nbsp;//i;
            print $cell."\n";
        }
    }
}
...