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 $_\n"};





              }

              else {

               die $response->status_line;

               };

~                                                                                                                                                                                                                             

~                                                                                                                                                                                                                             

~

perl HTML::TreeBuilder::XPath的更多相关文章

  1. perl 登录某网站

    <pre name="code" class="html">use Net::SMTP; use LWP::UserAgent; use HTTP: ...

  2. perl 爬虫两个技巧

    <pre name="code" class="cpp">jrhmpt01:/root/lwp# cat data.html <div cla ...

  3. perl lwp 超时问题

    lwp 超时问题: jrhmpt01:/root/async# cat a1.pl use LWP::UserAgent; use utf8; use DBI; use POSIX; use Data ...

  4. perl 循环类选择器 ,爬取内容

    jrhmpt01:/root/lwp/0526# cat 0526.txt <div class="TXD_sy_title"><span class=" ...

  5. perl 爬取某理财网站产品信息

    use LWP::UserAgent; use utf8; use DBI; $user="root"; $passwd="xxxxx"; $dbh=" ...

  6. perl 爬取数据<1>

    use LWP::UserAgent; use POSIX; use DBI; $user="root"; $passwd="11111111"; $dbh=& ...

  7. perl 爬取csdn

    <pre name="code" class="python">use LWP::UserAgent; use POSIX; use HTML::T ...

  8. perl 爬取上市公司业绩预告

    <pre name="code" class="python">use LWP::UserAgent; use utf8; use DBI; use ...

  9. perl 爬取同花顺数据

    use LWP::UserAgent; use utf8; use DBI; $user="root"; $passwd='xxx'; $dbh=""; $db ...

随机推荐

  1. elasticsearch 性能测试

    最近花很大的经历来做性能测试,把结果整理到了ppt中,可能有个别地方不准,但是可以看看一个趋势. 主要分为两部分,一部分是写入elasticsearch性能,一部分是查询测试,elasticsearc ...

  2. A站有一个页面需要PV统计 A站读写该数据 B站读该数据 需要数据同步

    A站弄个缓存,并且开放出一个读取借口给B站 B站读取数据的时候,调用该接口和数据库内的数据累加,然后进行限时即可 ---------------------- 另外其他方法 session服务.mem ...

  3. hdu 4007 Dave(线性探查+枚举)

    Problem Description Recently, Dave is boring, so he often walks around. He finds that some places ar ...

  4. pyqt 同时勾选多个items(网友提供学习)

    框选多个item之后,用空格键可以勾选/去选多个item,效果如下图所示: http://oglop.gitbooks.io/pyqt-pyside-cookbook/list/img/checkbo ...

  5. JUnit4中的测试套件

    测试套件 JUnit3.8中,用测试套件同时运行多个测试类(http://www.cnblogs.com/mengdd/archive/2013/04/07/3006265.html). 在JUnit ...

  6. What a Mess(二分)

    What a Mess Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit  ...

  7. StaggeredGridView+universal-image-loader载入网路图片实现瀑布流

    StaggeredGridView 开源lib  https://github.com/maurycyw/StaggeredGridView 文章demo下载地址  http://download.c ...

  8. Linux各个目录的作用

      /binbin是binary的缩写.这个目录沿袭了UNIX系统的结构,存放着使用者最经常使用的命令.例如cp.ls.cat,等等./boot这里存放的是启动Linux时使用的一些核心文件./dev ...

  9. Unity 2D 跑酷道路动起来

    之前做2D的游戏怎样让背景动起来?就想着做成滚屏效果不就行了,今天在网上看到人家做的既简单又方便,唉,忏愧啊!不过还好,下次可以为自己所用了!呵呵 废话就不扯了,新建工程! 1 ,打开Unity 5. ...

  10. HTTP协议3之压缩--转

    HTTP内容编码和HTTP压缩的区别 HTTP压缩,在HTTP协议中,其实是内容编码的一种. 在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码. 从而达到压缩的 ...