12. mantovani@perl.org.br
São Paulo Perl Monger
From Hell
while ($string =~ m{<a class="EsquerdaMenu"
href="(ListaProdutos.asp?IDLoja=d+&Y=d+(?:&cch=)?
&IDCategoria=d+)".*?>(.+?)</a>}sig) {
my $link = 'http://www.foo.com.br/sistema/'.$1;
my $cat = $2;
$link =~ s/Y=d+/Y=/io;
if($cat !~ m/Novidades/io) {
push(@{$spider->{linhas_cfg}}, $spider-
>dicionario($spider->retira_html($cat)) . ";$link");
}
}
13. mantovani@perl.org.br
São Paulo Perl Monger
O código anterior não é
code-golf
É um código usado num ambiente real de
produção.
Não me perguntem o que o código anterior faz
19. mantovani@perl.org.br
São Paulo Perl Monger
Parent
Cada elemento e atributo tem um parent.
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
O elemento book é pai do title,author, year e
price.
20. mantovani@perl.org.br
São Paulo Perl Monger
Children
Children pode ter zero, one ou mais childrens.
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
O elemento, title, author, year e price são
todas childrens do elemento book.
21. mantovani@perl.org.br
São Paulo Perl Monger
Siblings
São nodes que tem o mesmo elemento.
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
O node title, author, year e price são todos
siblings.
22. mantovani@perl.org.br
São Paulo Perl Monger
Ancestors
São todos os antepassados do elemento.
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
O ancestors do title é o book e o bookstore.
23. mantovani@perl.org.br
São Paulo Perl Monger
Descendants
São todos os descendentes do elemento.
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
Os descendants do elemento bookstore são
book, e todos irmãos do title. (e o title)
24. mantovani@perl.org.br
São Paulo Perl Monger
WWW::Mechanize
Um módulo Perl feito para automatizar as ações
de um browser.
Ele cuida de todos os os métodos HTTP, ele cuida de até um
certo nível de parsing como links e imagens, suporte SSL,
cookies, permite customizar o cabeçalho HTTP, te redireciona
automaticamente, Proxy e autentificação HTTP.
Entre outros.
25. mantovani@perl.org.br
São Paulo Perl Monger
Mechanize ;)
use WWW::Mechanize;
my $mech = WWW::Mechanize->new(
agent_alias => 'Linux Mozilla',
stack_depth => 5
);
$mech->get($url);
print $mech->content;
26. mantovani@perl.org.br
São Paulo Perl Monger
HTML::TreeBuilder::XPath
my $tree = HTML::TreeBuilder::XPath->new_from_content($content);
my $menu = $xpath->findnodes('//ul[@class="sMenu"]')->[0];
my $sub_menus = $menu->findnodes('.//ul');