Получение значений из внутренних ссылок веб-страницы - PullRequest
0 голосов
/ 14 декабря 2011

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

В текстовых файлах есть текст и числа, где мне нужно получить конкретное число с процентом (т. Е. 52,56%) и сохранить его в другом текстовом / 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 ]

1 голос
/ 14 декабря 2011

Это должно сработать:

!/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 голосов
/ 14 декабря 2011

Конечно, не проверено, поскольку вы не предоставляете достаточные входные данные.

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 голосов
/ 14 декабря 2011

Если вы можете запустить программу .NET для этого, я рекомендую:

  1. Получите пакет HtmlAgility
  2. Используйте пакет HtmlAgility, чтобы проанализировать все теги привязки
  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 голосов
/ 14 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...