Thread Eine Art Regex-Engine für HTML - gibt es das schon? (4 answers)
Opened by flowdy at 2012-08-11 23:02

topeg
 2012-08-13 23:15
#160888 #160888
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Damit ich es richtig verstehe. Ich habe HTML da kopiere ich mir die Interessanten teile heraus, markiere die Stellen, die mich interessieren, und der Rest macht das Modul?

Wenn dem so ist, dann ist es durchaus interessant. Ich nutze schon seit längerem ein Programm was die InternetSeiten von Fernsehsender parst und daraus meine Fernsehzeitschrift generiert.
Das möchte ich noch nicht veröffentlichen, da unter anderem das Parsen der Seiten nicht sonderlich Komfortabel gelöst ist (HTML::TreeBuilder).

Bei Template::Extract und Text::Scraper müssen die Datenstrukturen nach bearbeitet werden. Das ist für einen Editierenden, der nicht gut Programmieren kann nicht einfach. HTML::TreeBuilder ist da vergleichbar.
Richtig Kompliziert wird es wenn viele Templates und Seiten bearbeitet werden sollen. Da gibt es nichts.

Idealer weise sollte man in den Templates gesuchten Stellen benennen können. Weiterhin wäre eine Signal-Struktur von Vorteil. Damit kann der Programmierer die Datenstruktur selbst bestimmen und zusammen mit den benannten Such-Stellen die Struktur erstellen, die er braucht.

Mal so aus der Hüfte geschossen, wie ich mir ein Interface vorstellen würde.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use Template_Engine;
use LWP::Simple;

my $template=Template_Engine->new();
$template->add_template( Parse_Datum => eval{local $/=undef; <DATA>} );

$template->signal_connect('Datum' => &datum, 'optionale Werte an die Funktion');

$template->parse( Parse_Datum => get('http://example.org') );

sub datum
{
  my $wert=shift;
  my @path=@{shift};
  my $opts=shift;

  print "@path => $wert\n";

  return 1;
}

__DATA__
[%foreach%]
  <div id="tag">
  [%...%]
  [%foreach%]
    [%...%]
    <div class="datum">[%value path='/Tag/Datum'%]</div>
    [%...%]
  [%endfor%]
  [%...%]
  </div>
[%endfor%]


Mit einer Ausgabe wie:

Code: (dl )
1
2
3
4
Parse_Datum Tag Datum -> 19.2.2010
Parse_Datum Tag Datum -> 11.6.2024
Parse_Datum Tag Datum -> 25.5.1999
Parse_Datum Tag Datum -> 3.3.2003


Oder mit so einem Template:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
[%foreach path="/Tage"%]
<div id="tag">
[%...%]
[%foreach%]
[%...%]
<p>[%value path="Name"%]</p>
[%...%]
<div class="datum">[%value path='Datum'%]</div>
[%...%]
[%endfor%]
[%...%]
</div>
[%endfor%]

Code: (dl )
1
2
3
4
Parse_Datum Tage Datum -> 19.2.2010
Parse_Datum Tage Datum -> 11.6.2024
Parse_Datum Tage Datum -> 25.5.1999
Parse_Datum Tage Datum -> 3.3.2003


Und wenn für "Name" auch eine Funktion definiert wurde:
Code: (dl )
1
2
3
4
5
6
7
8
Parse_Datum Tage Name -> Dienstag
Parse_Datum Tage Datum -> 19.2.2010
Parse_Datum Tage Name -> Montag
Parse_Datum Tage Datum -> 11.6.2024
Parse_Datum Tage Name -> Donnerstag
Parse_Datum Tage Datum -> 25.5.1999
Parse_Datum Tage Name -> Sonntag
Parse_Datum Tage Datum -> 3.3.2003


Schön wäre wenn man alle Tags so behandeln könnte.

So was gibt es nicht, soweit ich weiß. Das wäre auch für andere Interessant.

View full thread Eine Art Regex-Engine für HTML - gibt es das schon?