[英]How can I extract XML of a website and save in a file using Perl's LWP?
如何從網站( http://tv.yahoo.com/listings )中提取信息,然后從中創建XML文件? 我想保存它以便稍后解析並使用JavaScript顯示信息?
我是Perl的新手,我不知道如何做到這一點。
當然。 最簡單的方法是Web :: Scraper模塊。 它的作用是讓你定義包含的刮刀對象
Scraper對象獲取URL並返回提取數據的哈希值。 如果需要,每個鍵的提取器代碼本身可以是另一個scraper對象,這樣您就可以定義如何刮擦重復的復合頁面元素:提供XPath以在外部刮刀中找到復合元素,然后提供更多的XPath來拉動在內部刮刀中分出它的各個位。 然后結果自動成為嵌套數據結構。
簡而言之,您可以非常優雅地將來自整個頁面的數據吸收到Perl數據結構中。 這樣,XPath + Perl的全部功能可用於任何頁面。 由於頁面是使用HTML :: TreeBuilder進行解析的,因此它的標簽是多么令人討厭。 生成的scraper腳本比基於正則表達式的scraper更容易維護,並且更容忍輕微的標記變化。
壞消息:到目前為止,它的文檔幾乎不存在,所以你必須通過谷歌搜索類似[ miyagawa web :: scraper ]的東西來找到模塊作者發布的示例腳本。
雖然通常LWP :: Simple或WWW :: Mechanize和HTML :: Tree是從網頁中提取數據的好方法,但在這種特殊情況下(電視列表),有一種更簡單的方法:
將XMLTV與Scheduleles Direct中的數據一起使用。 收取少量費用(每年20美元),但有一些優點:
use XMLTV;
)。 如果要將信息傳遞給Javascript,請使用Javascript Object Notation(JSON)而不是XML。 有很多Perl庫,比如JSON :: Any ,可以為你處理。
tv.yahoo.com不是很語義,不容易刮! 他們可能是更好的替代品或飼料?
使用pQuery我可以快速獲得時間和節目....
use pQuery;
pQuery( 'http://tv.yahoo.com/listings' )
->find( '.show' )->each(
sub {
my $n = shift;
my $pQ = pQuery( $_ );
say $pQ->text;
}
);
# => 4:00pm - 6:30pm Local Programming
要刮一些細節你可以嘗試這個....
use pQuery;
my @tv_progs;
pQuery( 'http://tv.yahoo.com/listings' )
->find( 'li div strong' )->each(
sub {
my $n = shift;
my $pQ = pQuery( $_ );
$tv_progs[ $n ]->{ time } = $pQ->text;
}
)
->end
->find( '.showTitle' )->each(
sub {
my $n = shift;
my $pQ = pQuery( $_ );
$tv_progs[ $n ]->{ name } = $pQ->text;
}
);
for my $prog ( @tv_progs ) {
say $prog->{name} . " @ " . $prog->{time};
}
# => Local Programming @ 4:00pm - 6:30pm
並獲得渠道....
use pQuery;
pQuery( 'http://tv.yahoo.com/listings' )
->find( '.chhdr a' )->each(
sub {
my $n = shift;
my $pQ = pQuery( $_ );
say $pQ->text;
}
);
# => ABC
但是,將頻道與節目信息相匹配將需要一些工作;-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.