Javascript 如何使用Perl'提取网站的XML并保存到文件中;什么是LWP?

Javascript 如何使用Perl'提取网站的XML并保存到文件中;什么是LWP?,javascript,xml,perl,extract,lwp,Javascript,Xml,Perl,Extract,Lwp,如何从网站()提取信息,然后从中创建XML文件?我想保存它以便以后解析并使用JavaScript显示信息 我对Perl非常陌生,不知道如何使用它。当然。最简单的方法是模块。它的作用是让您定义由 散列键名称 查找感兴趣元素的XPath表达式 以及从中提取数据位的代码 Scraper对象获取URL并返回提取数据的散列。如果需要,每个键的提取器代码本身可以是另一个scraper对象,这样您就可以定义如何刮取重复的复合页面元素:提供XPath以在外部scraper中查找复合元素,然后提供更多XPath以

如何从网站()提取信息,然后从中创建XML文件?我想保存它以便以后解析并使用JavaScript显示信息


我对Perl非常陌生,不知道如何使用它。

当然。最简单的方法是模块。它的作用是让您定义由

  • 散列键名称
  • 查找感兴趣元素的XPath表达式
  • 以及从中提取数据位的代码
  • Scraper对象获取URL并返回提取数据的散列。如果需要,每个键的提取器代码本身可以是另一个scraper对象,这样您就可以定义如何刮取重复的复合页面元素:提供XPath以在外部scraper中查找复合元素,然后提供更多XPath以在内部scraper中取出其各个位。然后,结果将自动生成嵌套的数据结构

    简而言之,您可以非常优雅地将整个页面中的数据吸收到Perl数据结构中。在这样做时,XPath+Perl的全部功能可用于任何页面。因为页面是用HTML::TreeBuilder解析的,所以标记有多糟糕并不重要。与基于regex的scraper相比,生成的scraper脚本更易于维护,并且更能容忍标记的微小变化

    坏消息:到目前为止,它的文档几乎不存在,因此您必须通过谷歌搜索[]之类的内容来查找模块作者发布的示例脚本。

    虽然一般来说,or和是从网页中提取数据的好方法,但在这种特殊情况下(电视节目表),有一种更简单的方法:

    与来自的数据一起使用。费用很小(20美元/年),但有以下优点:

  • 已经为您编写了解析代码(只需
    使用XMLTV;
  • 你不会违反雅虎的服务条款
  • 你不必与雅虎打交道,积极尝试打破你的脚本。(他们不喜欢自动脚本下拉电视节目表;请参见第2页。)

  • 如果要将信息传递给Javascript,请使用Javascript对象表示法(JSON)而不是XML。有很多Perl库,例如,可以为您处理这些问题。

    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
    

    但是,将后台频道与节目信息进行匹配需要一些工作;-)

    另请参见[是我的德语谈论Web::Scraper.自动翻译:[你真的想推荐这种beta版模块吗?beta版,真的吗?它是LWP、HTML::TreeBuilder和HTML::Selector::XPath组合的粘合剂,所有这些都是经过战斗测试的生产质量模块。不过,如果你喜欢编写样板文件,那就随你的便吧……我还没有尝试过,所以我可能会得出结论。但作者指出“此模块的测试版质量。API是从SCRAPI偷来的,但将来可能会更改”