TreeBuilder 获取嵌入节点
TreeBuilder Get embedded nodes
基本上,我需要在 HTML 代码中获取所有这些人的姓名和电子邮件。
<thead>
<tr>
<th scope="col" class="rgHeader" style="text-align:center;">Name</th><th scope="col" class="rgHeader" style="text-align:center;">Email Address</th><th scope="col" class="rgHeader" style="text-align:center;">School Phone</th>
</tr>
</thead><tbody>
<tr class="rgRow" id="ctl00_ContentPlaceHolder1_rg_People_ctl00__0">
<td>
Michael Bowen
</td><td>mbowen@cpcisd.net</td><td>903-488-3671 ext3200</td>
</tr><tr class="rgAltRow" id="ctl00_ContentPlaceHolder1_rg_People_ctl00__1">
<td>
Christian Calixto
</td><td>calixtoc@cpcisd.net</td><td>903-488-3671 x 3430</td>
</tr><tr class="rgRow" id="ctl00_ContentPlaceHolder1_rg_People_ctl00__2">
<td>
Rachel Claxton
</td><td>claxtonr@cpcisd.net</td><td>903-488-3671 x 3450</td>
</tr>
</tbody>
</table><input id="ctl00_ContentPlaceHolder1_rg_People_ClientState" name="ctl00_ContentPlaceHolder1_rg_People_ClientState" type="hidden" autocomplete="off"> </div>
<br>
我知道如何将树构建器与节点等一起使用,并且我在我的一些脚本中使用了这段代码。
my ($file) = @_;
my $html = path($file)-> slurp;
my $tree = HTML::TreeBuilder->new_from_content($html);
my @nodes = $tree->look_down(_tag => 'input');
my $val;
foreach my $node (@nodes) {
$val = $node->look_down('name', qr/$txt_Website/)->attr('value');
}
return $val;
我打算为此函数使用相同的代码,但我意识到我没有太多要搜索的内容,因为 <td>
标记在脚本的许多其他地方。我确信有更好的方法来解决这个问题,但我似乎找不到它。
LINK 至 HTML 代码:http://pastebin.com/qLwu80ZW
我的代码:https://pastebin.com/wGb0eXmM
注意:我确实尽可能多地查看了 google,但我不太确定应该搜索什么。
包含您需要的数据的 table
元素具有唯一的 class rgMasterTable
,因此您可以在 look_down
中搜索该元素
我写这个是为了演示。它直接从你的 pastebin
中提取 HTML
use strict;
use warnings 'all';
use LWP::Simple 'get';
use HTML::TreeBuilder;
use constant URL => 'http://pastebin.com/raw/qLwu80ZW';
my $tree = HTML::TreeBuilder->new_from_content(get URL);
my ($table) = $tree->look_down(_tag => 'table', class => 'rgMasterTable');
for my $tr ( $table->look_down(_tag => 'tr') ) {
next unless my @td = $tr->look_down(_tag => 'td');
my ($name, $email) = map { $_->as_trimmed_text } @td[0,1];
printf "%-17s %s\n", $name, $email;
}
输出
Michael Bowen mbowen@cpcisd.net
Christian Calixto calixtoc@cpcisd.net
Rachel Claxton claxtonr@cpcisd.net
基本上,我需要在 HTML 代码中获取所有这些人的姓名和电子邮件。
<thead>
<tr>
<th scope="col" class="rgHeader" style="text-align:center;">Name</th><th scope="col" class="rgHeader" style="text-align:center;">Email Address</th><th scope="col" class="rgHeader" style="text-align:center;">School Phone</th>
</tr>
</thead><tbody>
<tr class="rgRow" id="ctl00_ContentPlaceHolder1_rg_People_ctl00__0">
<td>
Michael Bowen
</td><td>mbowen@cpcisd.net</td><td>903-488-3671 ext3200</td>
</tr><tr class="rgAltRow" id="ctl00_ContentPlaceHolder1_rg_People_ctl00__1">
<td>
Christian Calixto
</td><td>calixtoc@cpcisd.net</td><td>903-488-3671 x 3430</td>
</tr><tr class="rgRow" id="ctl00_ContentPlaceHolder1_rg_People_ctl00__2">
<td>
Rachel Claxton
</td><td>claxtonr@cpcisd.net</td><td>903-488-3671 x 3450</td>
</tr>
</tbody>
</table><input id="ctl00_ContentPlaceHolder1_rg_People_ClientState" name="ctl00_ContentPlaceHolder1_rg_People_ClientState" type="hidden" autocomplete="off"> </div>
<br>
我知道如何将树构建器与节点等一起使用,并且我在我的一些脚本中使用了这段代码。
my ($file) = @_;
my $html = path($file)-> slurp;
my $tree = HTML::TreeBuilder->new_from_content($html);
my @nodes = $tree->look_down(_tag => 'input');
my $val;
foreach my $node (@nodes) {
$val = $node->look_down('name', qr/$txt_Website/)->attr('value');
}
return $val;
我打算为此函数使用相同的代码,但我意识到我没有太多要搜索的内容,因为 <td>
标记在脚本的许多其他地方。我确信有更好的方法来解决这个问题,但我似乎找不到它。
LINK 至 HTML 代码:http://pastebin.com/qLwu80ZW
我的代码:https://pastebin.com/wGb0eXmM
注意:我确实尽可能多地查看了 google,但我不太确定应该搜索什么。
包含您需要的数据的 table
元素具有唯一的 class rgMasterTable
,因此您可以在 look_down
我写这个是为了演示。它直接从你的 pastebin
中提取 HTMLuse strict;
use warnings 'all';
use LWP::Simple 'get';
use HTML::TreeBuilder;
use constant URL => 'http://pastebin.com/raw/qLwu80ZW';
my $tree = HTML::TreeBuilder->new_from_content(get URL);
my ($table) = $tree->look_down(_tag => 'table', class => 'rgMasterTable');
for my $tr ( $table->look_down(_tag => 'tr') ) {
next unless my @td = $tr->look_down(_tag => 'td');
my ($name, $email) = map { $_->as_trimmed_text } @td[0,1];
printf "%-17s %s\n", $name, $email;
}
输出
Michael Bowen mbowen@cpcisd.net
Christian Calixto calixtoc@cpcisd.net
Rachel Claxton claxtonr@cpcisd.net