2012-04-06 6 views
0

Ich habe eine Bedingung, wo ich Text von einem bestimmten Tag abrufen möchte, aber es scheint nicht wahr zu sein .. irgendeine Hilfe?Warum funktioniert diese Bedingung nicht? Div mit Klasse

#!/usr/bin/perl 

use HTML::TreeBuilder; 
use warnings; 
use strict; 
my $URL = "http://prospectus.ulster.ac.uk/modules/index/index/selCampus/JN/selProgramme/2132/hModuleCode/COM137"; 
my $tree = HTML::TreeBuilder->new_from_content($URL); 

if (my $div = $tree->look_down(_tag => "div ", class => "col col60 moduledetail")) { 
printf $div->as_text(); 
      print "test"; 
open (FILE, '>mytest.txt'); 
print FILE $div; 
close (FILE); 
} 
     print $tree->look_down(_tag => "th", class => "moduleCode")->as_text(); 
$tree->delete(); 

Es wird nicht immer in die if-Anweisung und der Druck außerhalb der if-Anweisung zu sagen, dass es ein nicht definierter Wert ist, aber ich weiß, dass es wahr zurückkehren sollte, weil diese Tags existieren.

<th class="moduleCode">COM137<small>CRN: 33413</small></th> 

dank

+0

@downvoter: Was ist falsch an dieser Frage? – Borodin

Antwort

3

Sie rufen HTML::TreeBuilder->new_from_content noch Sie eine URL statt Inhalte zu liefern. Sie müssen den HTML-Code get haben, bevor Sie ihn an HTML::TreeBuilder übergeben können.

Der einfachste Weg ist die Verwendung von LWP::Simple, die eine Unterroutine namens get importiert. Dies liest die Daten an der URL und gibt sie als String zurück.

Der Grund dafür, dass Ihr bedingter Block niemals ausgeführt wird, ist, dass Sie ein Leerzeichen im Tag-Namen haben. Sie benötigen "div" anstelle von "div ".

Beachten Sie auch die folgenden:

  • Sie sollten eine einzelne Saite durch nicht ausgegeben printf mit dieser Zeichenfolge als Formatbezeichner verwenden. Es kann fehlendes Argument Warnungen generieren und die Zeichenfolge nicht ordnungsgemäß ausgeben.

  • Sie sollten idealerweise lexikalische Datei-Handles und die Drei-Argumente-Form von open verwenden. Sie sollten auch den Status aller open Anrufe überprüfen und entsprechend reagieren.

  • Ihre Skalarvariable $div ist eine gesegnete Hash-Referenz. Wenn Sie also so drucken, wie sie ist, wird etwa HTML::Element=HASH(0xfffffff) ausgegeben. Sie müssen ihre Methoden aufrufen, um die Werte, die Sie

Mit diesen Fehler anzeigen möchten, extrahieren korrigiert Ihr Code wie folgt aussieht, obwohl ich nicht die Ausgabe formatiert haben, wie ich kann nicht sagen, was Sie wollen.

use strict; 
use warnings; 

use HTML::TreeBuilder; 
use LWP::Simple; 

my $url = "http://prospectus.ulster.ac.uk/modules/index/index/selCampus/JN/selProgramme/2132/hModuleCode/COM137"; 
my $html = get $url; 
my $tree = HTML::TreeBuilder->new_from_content($html); 

if (my $div = $tree->look_down(_tag => "div", class => "col col60 moduledetail")) { 
    print $div->as_text(), "\n"; 
    open my $fh, '>', 'mytest.txt' or die "Unable to open output file: $!"; 
    print $fh $div->as_text, "\n"; 
} 

print $tree->look_down(_tag => "th", class => "moduleCode")->as_text, "\n"; 
Verwandte Themen