/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
tabeller med HTML::TableExtract
Fra : TDJ


Dato : 25-04-03 22:34

Jeg har et spørgsmål til HTML::TableExtract.

Jeg ønsker at få data ud af nogle tableller, hvilket nemt lader sig gøre
med ovennævnte model.

Dataene er fra et TV-program, som jeg gerne vil have ind i en SQL-
database.

Problemet er, at jeg ikke på forhånd ved hvordan disse
tabeller ser ud. Der er to forskellige muligheder, alt efter om der er
beskrivelse af programmet, eller ikke.

Uden lang beskrivelse:
<table>
<tr>
<td valign="top" width="2%">
<img ...>
</td>
<td>
07.00 programmet titel
</td>
</tr>
</table>
<table>
<tr>
<td valign="top" width="2%">
<img ..>
</td>
<td>
Kort beskrivelse af programmet... bla bla bla
</td>
</tr>
</table>



MED lang beskrivelse:
<div id="ID99999999">
<table>
<tr>
<td>
<img>
</td>
<td width="98%" valign='top'>
<a href="#">07.25 Programmets titel</a> 
(9) 
</td>
</tr>
</table>
</div>
   --------------------
<table>
<tr>
<td>
 
</td>
<td>
Kort beskrivelse af programmet
</td>
</tr>
</table>
   --------------------
<div id="ID99999999t2z">
<table>
<tr>
<td>
 
</td>
<td>
           Lang beskrivelse af programmet, omtale, personer, etc
           etc.
    </td>
</tr>
</table>
</div>

====================================================================

Programmer med hhv. kort og lang beskrivelse kan blandes i HTML-filen,
uden at det kan siges hvordan.

Er det på nogen måde muligt at få disse tabeller "læst" af Perl, således
at jeg får følgende data til slut:

tid|programnavn|kort_omtale|lang_omtale

Jeg ser mindst 2 problemer:
   * data fra forskellige tabeller skal "lægges sammen"
       (hvordan læser man 1 tabel ad gangen?)
   * nogle gange er der 3 tabeller, andre gange 2.

Nogle tips ?
Det behøves ikke nødvendigvis være med TableExtract !


 
 
Flemming Frandsen (27-04-2003)
Kommentar
Fra : Flemming Frandsen


Dato : 27-04-03 12:00

TDJ wrote:
> Jeg ser mindst 2 problemer:
>    * data fra forskellige tabeller skal "lægges sammen"
>        (hvordan læser man 1 tabel ad gangen?)
>    * nogle gange er der 3 tabeller, andre gange 2.

Jeg har skrevet dette lille program der kan parse det data du postede.

Der skal nok smækkes noget mere filtering på der hvor data bliver puttet
i @raw_data, men resten skulle være solidt nok.

Det ville have været hjælpsomt hvis du havde postet en url til den side
du prøver at parse...

Hvis du bruger det her kode så kunne jeg godt tænke mig at få en kopi af
dataene:)

Jeg har selv skrevet noget i samme boldgade, nemlig et script som læser
dit personlige tvprogram fra tv.tv2.dk og uploader det til en palm pilot
som aftaler: http://dion.swamp.dk/stuff.html

--
Regards Flemming Frandsen - http://dion.swamp.dk
PartyTicket.Net co founder & Yet Another Perl Hacker



TDJ (30-04-2003)
Kommentar
Fra : TDJ


Dato : 30-04-03 17:16

TAK for din indsats ! :)

> Det ville have været hjælpsomt hvis du havde postet en url til den side
> du prøver at parse...

Naturligvis...

http://www.dr.dk/nav/programoversigt/w3c/inc/channel.aframe?
channel=t2z&seltime=0&seldate=0

Jeg valgte at lave lidt om så den beholder HTML-koden. Jeg vil nemlig gerne
have ting som [genudsendelse] [TTV] etc etc med.

Jeg kan dog ikke få den til at matche med det regulære udtryk. Den dør hver
gang, tilsyneladende fordi følgende ikke matcher:
    $tnt =~ m/^(\d\d\.\d\d) (.*)$/ms;

Jeg vil gerne have følgende oplysninger ud af linier som denne:
---
<a href="#" onclick="EPG_Toggle('ID13643832t2z'); EPG_ImageToggle
('ID13643832Img','http://www.dr.dk/forside/pic/epg/close.gif','http://www.d
r.dk/forside/pic/epg/open.gif'); return false;" class='programmer'>09.40
&nbsp;Buffy - vampyrernes skræk</a>&nbsp; (74)&nbsp;<img
src='http://www.dr.dk/nav/programoversigt/img/genuds.gif' border='0'
alt='Genudsendelse'>&nbsp;
---
   $time = 09.40
   $title = "Buffy - vampyrernes skræk (74)"
   $alt = "Genudsendelse"

Tror bare jeg mangler noget i de regulære udtryk. Har prøvet med
   $tnt =~ m/.*?(\d\d\.\d\d) (.*)&nbsp;.*$/ms;
men det virker vist heller ikke..


> Hvis du bruger det her kode så kunne jeg godt tænke mig at få en kopi af
> dataene:)
Naturligvis.

Findes der forresten et program som kan validere regulære udtryk ?
Eksempelvis et Perl IDE, men gerne bare et stand-alone program ?


Flemming Frandsen (30-04-2003)
Kommentar
Fra : Flemming Frandsen


Dato : 30-04-03 18:48

TDJ wrote:
>     $tnt =~ m/^(\d\d\.\d\d) (.*)$/ms;

Prøv at lave alle nbsp'er om til normale spaces først:
$html =~ s/&nbsp;/ /gi;

Det er også en god ide(tm) at normalisere spaces til enkelte normale spaces:
$html =~ s/\s+/ /gi;

--
Regards Flemming Frandsen - http://dion.swamp.dk
PartyTicket.Net co founder & Yet Another Perl Hacker


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste