zoukankan      html  css  js  c++  java
  • perl HTML::TreeBuilder::XPath

    HTML::TreeBuilder::XPath 添加XPath 支持HTML::TreeBuilder


    use HTML::TreeBuilder::XPath;
      my $tree= HTML::TreeBuilder::XPath->new;
      $tree->parse_file( "mypage.html");
      my $nb=$tree->findvalue( '/html/body//p[@class="section_title"]/span[@class="nb"]');
      my $id=$tree->findvalue( '/html/body//p[@class="section_title"]/@id');


      my $p= $html->findnodes( '//p[@id="toto"]')->[0];
      my $link_texts= $p->findvalue( './a'); # the texts of all a elements in $p
      $tree->delete; # to avoid memory leaks, if you parse many HTML documents 
      
      描述:
      
      这个模块增加典型的XPath 到HTML::TreeBuilder, 让它容易查询文档
      
      让它更加容易的查询一个文档。


      方法:
      
      额外的方法增加到树对象和每个元素
      
      findnodes ($path)
      
      返回在$path找到的节点的列表 通过$path,在标量环境返回一个Tree::XPathEngine::NodeSet object.
      
      findnodes_as_string ($path)
      
      返回节点的文本值,作为一个字符串
      
      findnodes_as_strings ($path)
      
      
      返回结果节点的值的列表
      
      findvalue ($path)
      
      
      返回任何一个 Tree::XPathEngine::Literal, a Tree::XPathEngine::Boolean
        
      或者一个Tree::XPathEngine::Number object.
      
      
      如果path返回一个节点集,$nodeset->xpath_to_literal会被自动调用
      
      (因此 a Tree::XPathEngine::Literal is returned)
      
      注意 每个对象字符串所带来的开销,
      
      所以你只需要打印找到的值,或者
      
      findvalues ($path)
      
      返回匹配节点的值作为列表,这主要是和findnodes_as_strings一样,除了列表的元素是对象
      
      exists ($path)
      
      如果给定的path存在 就返回true
      
      matches($path)
      
      返回真如果元素匹配路径
      
      use  LWP::UserAgent;
    use HTML::TreeBuilder;
    open DATAFH,">>data.html" || die "open data file failed:$!";
    my $ua = LWP::UserAgent->new;
    $ua->timeout(10);
    $ua->env_proxy;
    $ua->agent("Mozilla/8.0");


    my $response = $ua->get('https://licai.yingyinglicai.com/product/list.htm');




    if ($response->is_success) {
     print DATAFH  $response->decoded_content;  # or whatever
    # print   $response->decoded_content;  # or whatever
      use HTML::TreeBuilder::XPath;
      my $tree= HTML::TreeBuilder::XPath->new;
      $tree->parse_file( "data.html");
      ##查找body内容,<td><div class="fresh"><p class="text-ellipsis-2"><i class="fresh-icon"></i><a href="/detail/11156-261-500-856-0544.htm">变现宝4275号</a></p></div></td>


       my @nb=$tree->findvalue( '/html/body//div[@class="fresh"]');
      foreach (@nb){print "Product is $_ "};


                  }
                  else {
                   die $response->status_line;
                   };
    ~                                                                                                                                                                                                                             
    ~                                                                                                                                                                                                                             
    ~                      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
  • 相关阅读:
    struts2简介
    项目整合SpringDataRedis
    SpringDataRedis入门Demo
    包管理-rpm
    文件查找与压缩
    N042第一周
    Shell
    Linux下终端字体颜色设置方法
    文本处理工具作业
    正则表达式
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350998.html
Copyright © 2011-2022 走看看