从网页链接中获取值

时间:2011-12-14 04:37:04

标签: c perl copy web

我有一个静态页面,其中包含指向服务器上文本文件的多个链接。 (大约100个链接都在Web浏览器上打开文本文件内容)。

文本文件包含文本和数字,我需要获取具有百分比的特定数字(即52.56%),并将其存储到另一个带有链接名称的text / csv文件中。

链接基本上采用单行格式:

VAA007
VAB038
VAC041
VAD050
VAE031
VEA032
VEB053
VEC044
VEF015

文本文件具有以下值以及许多其他文本和数字:

# Result Summary:
# Overall Run:191,Not Run:161,Covered:54.26%

链接地址/ URL的格式如下:

https://myWeb.local/~gags/cgi-bin/latestRun.pl
https://myWeb.local/~gags/cgi-bin/showReport.pl?fn=/OUT/VAA007.txt       
https://myWeb.local/~gags/cgi-bin/showReport.pl?fn=/OUT/VAD050.txt

是否有一些简单的方法可以解决上述问题并将结果导入文本文件或CSV文件?

4 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

!/bin/sh
URL=https://myWeb.local/~gags/cgi-bin/showReport.pl?fn=/OUT/
for file in `cat links.txt`
do
  curl -s "$URL$file.txt" | awk -F':' '/^# Overall/ {print $NF}' > "$file.txt"
done

假设链接存储在文件links.txt中。如果您需要先获取它们,可以将curl -s https://someurl > links.txt添加到脚本的顶部。

您没有指定是否必须登录服务器,如果是,则指定使用何种登录方案。如果这是一项要求,可以使用curl轻松处理。

答案 1 :(得分:0)

如果您可以为此运行.NET程序,我建议:

  1. 获取HtmlAgility Pack
  2. 将HtmlAgility包用于parse out all anchor tags
  3. 对于每个锚标记,提取href值并使用它来点击您的页面:

    WebClient wc = new WebClient();
    //Authenticate:
    wc.Credentials = new System.Net.NetworkCredential("[USER]", "[PASSWORD]", "[DOMAIN]");
    var url = "[THE URL FORM THE ANCHOR]";
    
    var result = wc.DownloadString(url);
    var resultArray = result.Split(',');
    
    var percent = resultArray[2].Split(':');
    
    return percent;
    

答案 2 :(得分:0)

当然,未经测试,因为您没有提供足够的输入数据。

use strictures;
use Text::CSV qw();
use WWW::Mechanize qw();
use autodie qw(:all);

my $static_page = 'http://…';
# or perhaps 'file://…' if reading from the local file system
my $url_pattern =
    qr'https://myWeb[.]local/~gags/cgi-bin/showReport[.]pl[?]fn=/OUT/(V.....)[.]txt';

my $csv = Text::CSV->new({ binary => 1, auto_diag => 2 })
    or die 'Cannot use CSV: ' . Text::CSV->error_diag;
open my $out, '>:encoding(UTF-8)', 'percentages.csv';
my $mech = WWW::Mechanize->new;

$mech->get($static_page);

for my $link ($mech->find_all_links(url_regex => $url_pattern)) {
    my $text_file_url = $link->url_abs;
    my ($v_id) = $text_file_url =~ /$url_pattern/;
    $mech->get($text_file_url);
    my $content = $mech->content;
    my ($percentage) = $content =~ /Covered:(.*)%/;
    $csv->print($out, [$v_id, $percentage]);
}

close $out;

答案 3 :(得分:-1)

你可以试试SGMLParser& urllib如果你知道一些python。