Thread 3 Fragen: Trefferliste umstrukturieren, mit gefunden Links weiterarbeiten + wie kann ich nur Teile eines Treffers anzeigen? (47 answers)
Opened by vitopetre at 2010-04-11 23:27

topeg
 2010-04-15 01:14
#136061 #136061
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Das funktionierte bei dir nicht weil außerhalb der for schleife $p nicht definiert ist.
Der Ansatz ist aber grundsätzlich richtig. Auch die Stellen stimmen. Aber hier kannst du auch explizit nach den Daten suchen, da sie einen eindeutigen String besitzen.
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
34
     if($contents)
     {
       my $content_data=get($contents);
       my $html2 = HTML::TreeBuilder->new();
       $html2->parse($content_data);
                 
       for my $p ($html2->look_down(_tag => 'p'))
       {
         next if($p->as_text() !~ /ISSN:/i);

#         # so geht das natürlich
#         my $doi=$p->content()->[10];
#         $values{doi}=$doi if($doi);
#         my $issn=$p->content()->[12];
#         $values{issn}=$issn if($issn);
         
         # wenn du dir nicht sicher bist wo genau die Daten stehen:
         for my $line ($p->content_list())
         {
           # wir suchen keine "HTML::Element" Objekte (hier das <br />)
           # einfacher text gibt bei "ref" "false" zurück
           next if(ref($line));

           # reguläre Ausdrücke zum finden der Zeilem mit "doi:" und "ISSN:"
           # gleichzeitiges holen der gesuchten Daten in "$1";
           $values{doi}=$1 if($line=~/doi:(.+?)$/i);
           $values{issn}=$1 if($line=~/ISSN:(.+?)$/i);
         }

         # schleife abbrechen
         last;
       }
       $html2->delete();
     }


EDIT:

Du stehst noch vor einem anderen Problem.
unter Umständen hast in $contents eine relative Pfadangabe. "../contents.html" oder so was. Das kannst du so nicht mit get holen, da weder Protokoll noch Server angegeben ist. Benutze CPAN:URI um die richtige URL zu ermitteln:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use URI;

...

      # nutze "URI" um relative Pfade mit einer Vollständigen URL
      # in absolute um zu wandeln
      # EDIT:        Das ist falsch im Zusammenhang mit dem restlichen Code
      #                                               v
      #my $url_contents=URI->new_abs($contents,$values->{link});
      # EDIT:
      # hier haben wir ja einen Hash und keine Hash-Referenz
      # Richtig:
      my $url_contents=URI->new_abs($contents,$values{link});
      my $content_data=get($url_contents);

...

Last edited: 2010-04-15 03:19:35 +0200 (CEST)

View full thread 3 Fragen: Trefferliste umstrukturieren, mit gefunden Links weiterarbeiten + wie kann ich nur Teile eines Treffers anzeigen?