2016-03-30 14 views
0

LWPユーザーエージェントを使用して、要求を送信して応答を取得しています。 私はhtml形式の応答とそれに添付されたファイルを取得します。perlでxmlレスポンスでファイルを送信する方法は?

例えば:私は、ファイルを取得する必要があり、この応答から

 `<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>` 

。誰も私がファイルを応答から得る手助けをすることはできますか?

答えて

1

情報を抽出するためにパーサーを使用します。私はXML::LibXMLを使用しましたが、パーサーが失敗した閉じるbrタグを削除しなければなりませんでした。

#!/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'); 

ます。また、無効なHTML構文解析にrecoverフラグを使用することができます応じて

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

は、私はファイルを読み取ることができてきたのか、自分のPCに保存しますか? – sharon

+0

ファイルurlを変数に格納すると、このエラー「empty XPath found /usr/lib/perl5/XML/LibXML.pm line 1317」がスローされます。このエラーが発生した理由。 – sharon

+0

@sharon:これは無関係のようです。新しい質問をして、コードを表示してください。 – choroba

関連する問題