2011-12-14 2 views
0

У меня статическая страница, содержащая несколько ссылок на текстовые файлы на сервере. (около 100 ссылок, которые полностью открывают содержимое текстового файла в самом веб-браузере).Получение значений из ссылок на веб-страницу

Текстовые файлы имеют текст и цифры, где мне нужно получить определенное число с процентом (то есть, 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 

Есть ли какой-либо простой способ выработать вышеизложенное и получить t он приводит к текстовому файлу или CSV-файлу?

ответ

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.

+0

Страницы HTTPS и, следовательно, предоставляют Неизвестный/неподдерживаемый протокол. :-( – gagneet

+0

@gagneet: вы не указали, нужно ли вам входить в систему, но если вы этого не сделаете, вы можете просто добавить '-k' /' --insecure'. – flesk

-1

Вы можете попробовать SGMLParser & urllib, если знаете какой-либо питон.

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; 
    
+0

С благодарностью Мэтью, я не могу отредактировать страницу, так как она сгенерирована на сервере, и в настоящее время у меня нет доступа на запись в системе. Если вы можете предоставить код C# или .NET, это будет замечательно ... :-) – gagneet

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; 
+0

Страницы HTTPS, и, следовательно, давая Неизвестный/неподдерживаемый протокол. :-( – gagneet

+0

Установите [LWP :: Protocol :: https] (http://p3rl.org/LWP::Protocol::https). – daxim

Смежные вопросы