Thread HTML::TreeBuilder- durch HTML tags interieren (5 answers)
Opened by iamlooking at 2015-02-17 09:14

Gast iamlooking
 2015-02-17 09:14
#179702 #179702
Hallo zusammen,

ich versucher gerade mit HTML::TreeBuilder durch eine Webseite zu iterieren. Sprich, ich möchte alle HTML Tags von oben nach unten durchlaufen. Wenn sich ein Tag in Untertags wie z.B. <ul><li..</li></ul> verzweigt möchte ich erst der Verzweigung nach gehen und dann wieder beim nächsten Tag weiter machen. Bisher habe ich immer HTML::Parser verwendet. Ich dachte HTML::TreeBuilder ist da irgendiwe komfortabler, komme aber nicht weiter wie ich in den Verzweigungen weiter komme.

Mein Testbody sieht so aus:
Code: (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
<body>
<p>
<h1>Überschrift H1</h1>
<h2>Überschrift H2</h2>
<h3>Überschrift H3</h3>
<h4>Überschrift H4</h4>
</p>
<p><strong>FETT</strong></p>
<p><em>SCHIEF</em></p>
<p><u>UNTERSTRICHEN</u></p>
<p style="color: #FF0000">Roter Text</p>
<p style="color: #0000FF">Blauer Text</p>
<p><img width="100px" src="bus.jpg"></p>
<p><table style="border: solid 1px">
<tr><td>Obenlinks</td><td>Obenrechts</td></tr>
<tr><td>Untenlinks</td><td>Untenrechts</td></tr>
</table></p>
<p>Dolor dignissimos voluptas debitis neque quas. Debitis corporis libero consectetur odio molestias eum sunt. </p>
<p>
<ul>
<li>Punkt 1</li>
<li>Punkt 2</li>
<li>Punkt 3</li>
<ul>
<li>Unterpunkt 1</li>
<li>Unterpunkt 2</li>
<li>Unterpunkt 3</li>
</ul>
</ul>
</body>


Das zugehörige Perlskript so:
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
my $Tree  = HTML::TreeBuilder->new();
$Tree->parse_content($html);

my @nodes   = $Tree->elementify();
my @content = $nodes[0]->content_list();

foreach my $elem (@content) {
  $data->{$elem->tag()} = $elem;
}

foreach my $elem ($data->{'body'}->content_list()) {
  if (!$elem->is_empty)) {
    my @list = $elem->content_refs_list(), "\n";
    my $tag = $elem->tag();

    if (ref($list[0]) eq 'SCALAR') {
      $elem->as_text());
    } else {
      #HIER MUESSTE ICH WEITER ABSTEIGEN KOENNEN, ODER?
    }
  }
}

$Tree->delete;

Last edited: 2015-02-17 09:42:46 +0100 (CET)

View full thread HTML::TreeBuilder- durch HTML tags interieren