2016-03-30 16 views
0

Mit dem LWP User Agent sende ich die Anfrage und bekomme die Antwort. Ich werde die Antwort im HTML-Format und eine Datei im Anhang erhalten.Wie bekomme ich die Datei in XML-Antwort in Perl gesendet?

zB:

 `<html> 
     <head> 
     <title>Download Files</title> 
     <meta http-equiv=\'Content-Type\' content=\'text/html; charset=utf-8\'> 
     <link rel=\'stylesheet\' href=\'http://res.mytoday.com/css/main.css\' type=\'text/css\'> 
     <link rel=\'stylesheet\' href=\'http://res.mytoday.com/css/Menu.css\' type=\'text/css\'> 
     <link rel=\'stylesheet\' href=\'/statsdoc/freeze.css\' type=\'text/css\'> 
     </head> 
     <body> 
     <table border=1> 
     <tr class=\'rightTableData\'> 
     <th>No.</th> 
     <th>File Name</th> 
     <th>File Size</th> 
     </tr><tr class=\'rightTableData\'> 
     <td>1</td><td> 
     <a href=\'/dlr_download?file=/mnt/dell6/SRM_DATA/data/API_FILE  /20160329/LSUZisbZahtHNeImZJm_1-1.csv.zip\'>1-1.csv.zip</a> 
    </td><td>487 bytes</td> </tr> 
    </table> 
    </br></br> 
    <center><a href=\'/dlr_download?file=/mnt/dell6/SRM_DATA/data/API_FILE/20160329/LSUZisbZahtHNeImZJm-csv.zip\'>Download all</a></center>               
    </body></html>` 

Aus dieser Antwort, die ich brauche die Datei zu erhalten. Kann mir jemand helfen, die Datei von der Antwort zu bekommen.

Antwort

1

Verwenden Sie einen Parser, um die Informationen zu extrahieren. Ich habe XML::LibXML verwendet, aber ich musste die schließenden br Tags entfernen, die den Parser fehlgeschlagen haben.

#!/usr/bin/perl 
use warnings; 
use strict; 

my $html = '<html> 
     <head> 
     <title>Download Files</title> 
     <meta http-equiv=\'Content-Type\' content=\'text/html; charset=utf-8\'> 
     <link rel=\'stylesheet\' href=\'http://res.mytoday.com/css/main.css\' type=\'text/css\'> 
     <link rel=\'stylesheet\' href=\'http://res.mytoday.com/css/Menu.css\' type=\'text/css\'> 
     <link rel=\'stylesheet\' href=\'/statsdoc/freeze.css\' type=\'text/css\'> 
     </head> 
     <body> 
     <table border=1> 
     <tr class=\'rightTableData\'> 
     <th>No.</th> 
     <th>File Name</th> 
     <th>File Size</th> 
     </tr><tr class=\'rightTableData\'> 
     <td>1</td><td> 
     <a href=\'/dlr_download?file=/mnt/dell6/SRM_DATA/data/API_FILE  /20160329/LSUZisbZahtHNeImZJm_1-1.csv.zip\'>1-1.csv.zip</a> 
    </td><td>487 bytes</td> </tr> 
    </table> 
    <!-- </br></br> I had to comment this out! --> 
    <center><a href=\'/dlr_download?file=/mnt/dell6/SRM_DATA/data/API_FILE/20160329/LSUZisbZahtHNeImZJm-csv.zip\'>Download all</a></center>               
    </body></html>'; 

use XML::LibXML; 
my $dom = 'XML::LibXML'->load_html(string => $html); 
print $dom->findvalue('/html/body/table/tr[2]/td[2]/a/@href'); 

Sie auch die recover Flag verwenden könnte ungültig HTML zu analysieren:

my $dom = 'XML::LibXML'->load_html(string => $html, recover => 1); 
+0

lesen kann ich die Datei kam als Antwort oder es in meinem PC speichern? – sharon

+0

Wenn ich die Datei-URL in einer Variablen ablege, wird der Fehler "leerer XPath gefunden unter /usr/lib/perl5/XML/LibXML.pm Zeile 1317" ausgegeben. Warum ist dieser Fehler aufgetreten? – sharon

+0

@sharon: Das scheint nicht verwandt zu sein. Stellen Sie eine neue Frage, zeigen Sie den Code an. – choroba