Как мне загрузить txt веб-контент, используя perl - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь загрузить данные с этой страницы данных . Я пробовал несколько скриптов, которые я гуглил. На странице данных я должен выбрать страны, которые я хочу, по одной за раз. Единственный сценарий, который приближается к тому, что я хочу:

#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;

my $url = 'https://www.ogimet.com/ultimos_synops2.php?lang=en&estado=Zamb&fmt=txt&Send=Send';
my $file = 'Zamb.txt';
getstore($url, $file);

Однако этот сценарий дает мне страницу, а не данные. Буду признателен, если смогу получить помощь для загрузки данных, если это возможно. Я также был бы признателен сделать это в php, если это может быть более простой альтернативой.

1 Ответ

1 голос
/ 29 февраля 2020

Ссылка возвращает текст, завернутый в HTML. Простейшим подходом было бы использовать HTML :: FormatText и HTML :: Parse для получения только текстовой версии.

#!/usr/bin/perl

use strict;
use warnings;

use HTML::TreeBuilder;
use HTML::FormatText;


my $url = 'https://www.ogimet.com/ultimos_synops2.php?lang=en&estado=Zamb&fmt=txt&Send=Send';
my $text = HTML::FormatText->new(leftmargin=>0, rightmargin=>100000000000)->format(HTML::TreeBuilder->new_from_url($url));

my $file = 'Zamb.txt';
open (my $fh, '>', $file);
print $fh $text;
close ($fh);
  • HTML::TreeBuilder->new_from_url($url) - загрузить и проанализировать html
  • HTML::FormatText->new(leftmargin=>0, rightmargin=>100000000000) - инициализировать html формат - установите правое поле на большое значение, чтобы предотвратить перенос

Это содержимое Zamb.txt впоследствии.

 $ cat Zamb.txt
##########################################################
# Query made at 02/29/2020 18:15:54 UTC
##########################################################

##########################################################
# latest SYNOP reports from Zambia before 02/29/2020 18:15:54 UTC
##########################################################
202002291200 AAXX 29124 67855 42775 51401 10310 20168 3//// 48/// 85201
                   333 5//// 85850 83080=

Мой php фу не обновлен, но для PHP я думаю, что вы можете использовать следующее:

<?php
$url = 'https://www.ogimet.com/ultimos_synops2.php?lang=en&estado=Zamb&fmt=txt&Send=Send';
$content = strip_tags(file_get_contents($url));
echo substr($content, strpos($content, '###############'));

Примечание. что есть некоторые параметры конфигурации, которые могут отключить выборку URL через file_get_contents, поэтому YMMV.

Однако на той же странице есть примечание:

ПРИМЕЧАНИЕ. Если вы хотите просто получить файлы с отчетами о синхронизации в формате CSV без тегов HTML рассмотрите возможность использования бинарного getsynop

Это позволит получить те же данные в удобном формате:

$ wget "https://www.ogimet.com/cgi-bin/getsynop?begin=$(date +%Y%m%d0000)&state=Zambia" -o /dev/null -O - | tail -1
67855,2020,02,29,12,00,AAXX 29124 67855 42775 51401 10310 20168 3//// 48/// 85201 333 5//// 85850 83080=
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...