要耐心看文档啊:
perldoc HTML::Element
my @tds = $node->parent->content_list;
print $tds[2]->as_trimmed_text, "\n";
乱码的问题,无非是用 Encode 转码罢了,区别是你直接调用 Encode 转码,还是看
HTML::TreeBuilder 等模块能否自动根据 html 里的编码信息自动转码,总之你得
先搞清楚获得的数据是什么编码,想转到什么编码。
perlw01f wrote:
> 部分源码如下:
> <tr>
> <td valign="top" class="FieldName"><b>Mineral Name</b></td>
> <td valign="top"> </td>
> <td valign="top">Kh, sy</td>
> </tr>
>
> <tr>
> <td valign="top" class="FieldName"><b>Formula</b></td>
> <td valign="top"> </td>
> <td valign="top">TX<sub>2</sub></td>
> </tr>
>
> <tr>
> <td valign="top" class="FieldName"><b>PSymbol</b></td>
> <td valign="top"> </td>
> <td valign="top">xxy</td>
> </tr>
> 我想通过'/html/body/table/tr/td[@valign="top"][1]'来获取class="FieldName"的
> Text,从而确定'/html/body/table/tr/td[@valign="top"][3]'的值(同一个表格下的值是一一对应的,
> Formula: TX2, PSymbol: xxy, ..., 类似于hash,我想通过其key来获取value )
> 想法是
> my $nodes = $tree->findnodes( '/html/body/table/tr/td[@valign="top"]
> [1]' ); #目标节点
> for my $node ( $nodes->get_nodelist() ){
> # print "$node\n"; #HTML::Element
> my $txt= $node->as_trimmed_text();
> ##问题就是在此,$txt就是class="FieldName"的Text,可是此时我如何定位至同级下的[3]呢?
> ##$node是一个HTML::Element,其方法太多,我看过了也很快就忘记了,其中貌似有一个parent的方法,获得的
> ##还是一个HTML::Element,我可以通过$node->parent()->as_trimmed_text()获取其
> Text,可是这么又曲折了,需要对获得的文本进行二次处理
> ##能否直接根据[1]定位至[3]直接获取其文本呢?貌似是一个xpath的问题,实在是外行,见笑了
> }
> 不知道 我说的是否清楚,非常感谢!
>
> 第二个问题是:为何H T M L__T r e e B u i l d e r__X P a t h解析得到总是带有乱码,无论是W W W
> Mechanize得到的还是本地文件,用了use HTTP::Response::Encoding; 无果,Encode之类的也是如此,网上方
> 法n多,解释原因也n多,我试过一些,不好使,大约是本质原因还不明白,记得有人说是UserAgent中的设置,比如
> Accept_Charset, Accept_Language之类的基本都试过了,是否是我通过设置UA来模拟一个浏览器的行为还不够呢,显然浏览
> 器中显示没有任何问题,网页编码设置在Mech中我也试过了,难道这两点还不够么?
> 请问有没有人碰到过类似问题,如何解决的,非常感谢
>
--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
没有评论:
发表评论