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. The Angles of a Triangle

    The Angles of a Triangle You are given the lengths for each side on a triangle. You need to find all ...

  2. ECharts JavaScript图表库 ECharts

    ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值 ...

  3. Hive 11、Hive嵌入Python

    Hive嵌入Python Python的输入输出都是\t为分隔符,否则会出错,python脚本输入print出规定格式的数据 用法为先add file,使用语法为TRANSFORM (name, it ...

  4. IOS开发之语音合成(科大讯飞)详解

    1.注册讯飞账号,申请APPID(注意选择IOS平台) 2.加载所需要的类库 3.导入所需要的类库文件头 4.调用申请的APPID以及所需函数,完成语音合成(需要参考官方给出的SDK文件)   详细步 ...

  5. c# 委托delegate 编写计算器

    .Net 中的委托类似于 C 或 C++ 中的函数指针.使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法.与 C 或 ...

  6. android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法

    最近项目开发中用到了android:launchMode="singleTask" 和 onNewIntent(Intent intent)两个特性,现总结一下经验: androi ...

  7. c++编程碰到的奇怪问题与解决

    今天写一个工具,调试过程中莫名其妙崩溃,类某些成员变量指针很奇怪,为0x00003001.最后检查的结果居然是这样的: 文件class1.h: class1 { int a; int b; } 文件: ...

  8. DE2带的IP核ISP12362报错问题解决 Error:avalon_slave_1_irq: associatedAddressablePoint out of range

    问题来源与对友晶提供的ISP1362 IP核的使用,由于Quartus II版本问题,它提供的IP基于7.0版本,而我用的版本为11.1,在SOPC Builder中重新加载IP,就出现了上述的错误报 ...

  9. SQLServer 跨服务器查询的两个办法

    网上搜了跨服务器查询的办法,大概就是Linked Server(预存连接方式并保证连接能力)和OpenDataSource(写在语句中,可移植性强).根据使用函数的不同,性能差别显而易见...虽然很简 ...

  10. javascript 获取event对象

    //转载处 http://www.cnblogs.com/funlake/archive/2009/04/07/1431238.html 非常详细 先从一个简单的例子说起,一个简单的button控件如 ...