[Triangulo-pm] Exemplo: Extraindo de texto da web
Adriano Ferreira
a.r.ferreira at gmail.com
Wed Dec 6 04:54:21 PST 2006
Entre as várias capacidades de Perl, vale citar:
(1) Perl é forte em protocolos de rede, com suporte
para uma infinidade deles (SMTP, HTTP, HTTPS,
POP, LDAP, DNS, etc., etc.)
(2) Expressões regulares são um show de bola.
O exemplo a seguir demonstra o uso (simplório) de LWP
combinado com expressões regulares.
O propósito do código (concentrado na sub fetch)
é fazer o download de uma URL e, se ela combinar
com a expressão regular dada, retornar o primeiro
grupo encontrado.
#!perl
use strict;
use warnings;
use LWP::UserAgent;
=over 4
=item B<fetch>
my $text = fetch($url, $regex [, $http_proxy]);
Busca uma página de HTML endereçada por C<$url>
e, se o conteúdo combina com a expressão regular
C<$regex>, retorna o texto encontrado.
my $url = 'http://foo';
my $text = fetch($url, qr/<h>(.*?)</h>/);
print "Texto: $text\n" if $text;
=back
=cut
sub fetch {
my $url = shift;
my $regex = shift;
my $http_proxy = shift;
my $ua = LWP::UserAgent->new;
$ua->proxy(['http'], $http_proxy) if $http_proxy;
my $r = $ua->get($url);
if ($r->is_success) {
return ($r->content =~ /$regex/) ? $1 : undef;
} else {
die $r->status_line;
}
}
my $url = 'http://mail.pm.org/pipermail/triangulo-pm/2006-December/thread.html';
my $re = qr|<LI><A HREF="\d+\.html">\[Triangulo-pm\] (.*?)$|m;
# Esta expressão regular foi projetada para combinar e extrair
# "Perl em Windows" em textos como:
# <LI><A HREF="000001.html">[Triangulo-pm] Perl em Windows
# tire o comentário e edite se você está atrás de um proxy
#my $proxy = 'http://user:pass@proxy-name-or-ip:3128/';
# como estou atrás de um proxy com autenticação, preciso
# de definir este terceiro argumento (que é opcional)
# com usuário e senha
my $text = fetch($url, $re, $proxy);
print "Texto: $text\n" if $text;
O download é feito com o módulo LWP::UserAgent (que embora não faça
parte da distribuição padrão) já vem instalado com ActiveState Perl
e não deve ser difícil de instalar nas outras configurações.
O exemplo dado busca a lista de mensagens do Triangulo-pm at pm.org
neste mês de dezembro e retorna o título da primeira mensagem
na página. Para construir a expressão regular correspondente,
foi usado um browser para visualizar o HTML da página e
então escrever algo que funcionasse.
Fora as inumeráveis linhas de comentários do exemplo, o núcleo
do código é bem pequeno e pode ser facilmente estendido para
fazer coisas mais úteis: todas as ocorrências da regex,
explorar diversas páginas, etc.
Dúvidas, comentários, correções: são todos bem vindos.
Adriano Ferreira
P.S. Para facilitar a vida de quem gostaria de experimentar com o
código acima, eu o repeti no attachment sem a indentação usada aqui na
mensagem.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fetch.pl
Type: application/octet-stream
Size: 1328 bytes
Desc: not available
Url : http://mail.pm.org/pipermail/triangulo-pm/attachments/20061206/b4be39db/attachment.obj
More information about the Triangulo-pm
mailing list