ado o volume
atual de dados
existentes na Web,
um processo automtico e metdico de indexao
de contedo se
faz extremamente necessrio.
E nesse
cenrio
que o Web
crawler se faz
presente buscando, filtrando e muitas vezes persistindo
contedo. Um dos mais poderosos web
crawlers conhecidos o googlebot, o
crawler web da Google, ele responsvel por vasculhar a web, procurando
por novas pginas para indexar e analisar se as pginas j existentes foram
devidamente atualizadas.
Um Web crawler, que tambm conhecido como web spider ou web robot,
e um agente de software utilizado para
automatizar pesquisa, captura e extrao
de dados. Trafegados geralmente em protocolos HTTP
junto com o modelo TCP/IP, a maioria dos robots desenvolvidos so voltados para a web tradicional onde
documentos html conectados por hyperlinks, tags e palavras chave so usados para rastrear e atender necessidades especficas como: download de imagens e
arquivos, validao
auto-
/ 42
O problema da informao
Para entendermos o porqu da prtica do crawling, precisamos falar um pouco sobre o desenvolvimento da internet. No iremos abordar a questo
de forma tcnica, pois o que importante no tanto o como, mas sim o quanto.
De acordo com a consultoria Jess3, o nmero de
usurios da rede em 1995 j era pouca coisa maior
que 45 milhes de pessoas e, de acordo com a mesma
consultoria, o nmero em setembro de 2009 j era de
1,73 bilhes de pessoas. De qualquer ponto de vista
esse um nmero impressionante, mas que no diz
muita coisa sozinho. No entanto, se juntarmos a ele
o nmero de informao disponvel atravs da web
teremos um problema real.
Uma pesquisa realizada pela University of Southern California intitulada The Worlds Technological Capacity to Store, Communicate, and Compute
Information, chegou a concluso que, em 2002, a
O Crawling
Requisies
Contedo
Crawler
Indexao
Persistncia
43 \
H vrias formas de se extrair dados de um documento. No entanto, ao lidar com contedo dinmico provvel que aplicar expresses regulares seja a
melhor forma.
Expresses regulares so padres que lhe permitem localizar de forma flexvel alguma sequncia de
caracteres. Isso significa que, com um mesmo padro,
possvel voc localizar uma sequncia de caracteres
especfica em qualquer lugar de um documento.
Por exemplo, possvel localizar qualquer ocorrncia da sequncia car dentro de um documento
independentemente de fazer parte das palavras carro, carreta, corretor ou mesmo sozinha car.
Desse modo possvel resgatar qualquer dado que
seja necessrio e process-lo conforme suas necessidades. Outro exemplo, mais prtico, a validao de
data, vejamos abaixo:
^([1-9]|0[1-9]|[1,2][0-9]|3[0,1])/([1-9]|1[0,1,2])/\d{4}$
Questes Legais
As questes de legalidade da prtica do web crawling so, ainda, obscuras. E aqui deve ficar claro o
que foi dito, isso vale principalmente para o contedo
proveniente da Web. J que pode existir um crawler
varrendo a intranet de uma empresa, o que mantm
os assuntos referentes ao acesso ao contedo, nesse
caso, restrito a uma esfera no pblica.
Nas questes do contedo proveniente da internet, a legislao prpria de cada pas, o que aumenta muito as variantes. De qualquer forma possvel
dividir essas questes em ticas e de lei positivada.
Nessa diviso possvel encontrar, pelo menos,
quatro questes importantes: servio, custo, privacidade e copyright.
/ 44
Servio e custos esto mais ligados tica. Crawlers podem afetar a qualidade de repostas dos servidores ao fazerem vrias requisies em um curto espao de tempo. Isso afeta, ou pode afetar, a qualidade
do servio prestado aos consumidores finais, os usurios, deixando-os mais lentos. Eles podem aumentar
tambm o consumo de banda, o que pode gerar custos extras aos proprietrios de pginas.
A privacidade talvez a questo mais difcil de
se definir. Normalmente o que est disponvel na internet pblico. Qual a diferena entre acessar uma
pgina atravs do navegador ou atravs de um programa que varre seu contedo? Aqui, talvez, o maior
problema o que se faz depois com a informao
obtida. A prtica de spam talvez exemplifique bem
esse problema. E-mails podem ser buscados atravs
de crawlers especficos para a funo e depois usados
em listas de malas diretas.
J o copyright o maior suporte legal regulamentao do web crawling. Uma prtica comum aos
crawlers a cpia e armazenamento de contedo com
direitos reservados sem a permisso do proprietrio.
Para aqueles que querem evitar o mximo de problemas legais e morais, uma recomendao seguir
as determinaes do arquivo robots.txt. Esse protocolo usado largamente desde 1994 impe algumas
regras para o clawling so seu domnio, determinando
o que pode ou no ser acessado. Por exemplo:
User-agent *
Disallow /teste/
HttpComponents da Apache
O Web Crawler
Nesta fase do artigo, iremos desenrolar o desenvolvimento do web crawler, a tarefa de web mining
do nosso exemplo ser do tipo busca de documentos
e ser utilizado o componente HttpClient da Apache
com o recurso para consumo de pginas html, Expresses Regulares para a recuperao especfica da
informao e criaremos um websevice com JAX-RS
para disponibilizar os dados recuperados pelo agente de software. Sero extradas algumas informaes
livres de usurios do github.com. O agente ser responsvel por capturar o avatar, lista de repositrios,
os links para comandos git clone de projetos e a url
para download dos arquivos ZIP do repositrio indeProtocolo HTTP + JAVA
Originalmente, o Java vem com bibliotecas para xado.
trabalhar e manipular dados trafegados no protocolo
http. Seguindo as especificaes w3c para protocolos Mo na massa: Fase 1
HTTP possvel voc criar seu prprio servidor sem a
A primeira fase para a criao de um web crawler
necessidade de APIs externas. Geralmente para esse se d pela avaliao do contedo a ser extrado pelo
tipo de tarefa utiliza-se as classes URL, HTTPUrlCon- agente. Nosso primeiro passo ento analisar a pginection e Socket do pacote java.net. Pensando pelo na principal do GitHub para extrair somente os links
lado acadmico interessante aprender como se do menu de navegao. Vamos avaliar a seguinte url:
criar um servidor http, criando suas prprias classes https://github.com/.
HttpClient, conectando via sockets etc. Mas quando
o tema produtividade citado, buscar alternativas Listagem 2. Expresso regular usada para extrair
maduras no mercado a melhor opo. Atualmente contedo da home do github.
existem frameworks robustos que facilitam a intera<[^>]*?class=\(?:explore|search|features|blog)
o e manipulao de dados trafegados na web.
[^>]*?\><a[^>]href=\(.*?)>(.*?)</a></[^>]*?>
Figura 2. Pgina principal do GitHub com expresso regular de extrao sendo executada no site http://regexpal.com/.
45 \
Mo na massa: Fase 2
dos beans.
Figura 4. Pgina da lista de repositrios https://github.com/rdccr/repositories e a pgina do repositrio https://github.com/rdccr/crud-array-recursive-php usado para ilustrar o contedo a ser capturado.
/ 46
Crawler.
IGitHubSearchEngine {
47 \
//Variaveis de instancia
private String urlTabRepositories;
private String urlAvatared;
private String urlDownloadZipFile;
private List<GitHubRepository> listGitHubRepository;
private List<GitHubCloneUrl> listGitHubCloneUrl;
private final GitHub gitHub;
private List<GitHubHome> listGitHubHome;
// Construtor com argumento
public GitHubSearchEngine(ICompileRegex regex) {
this.regex = regex;
this.gitHub = new GitHub();
}
// outros mtodos...
/**
* Metodo utilizado para recuperar lista de links da
home do github.
*/
public List<GitHubHome> findMenuGitHubHome(
HttpClient httpclient, HttpGet httpget,
ResponseHandler<String> responseHandler) {
try {
// Cria referencia para lista de objetos
GitHubHome.
this.listGitHubHome =
new ArrayList<GitHubHome>();
// Executa regex na resposta do httpclient.
this.matcher = regex.execute(
GitHubPattern.GITHUB_HOME, httpclient.
execute(httpget, responseHandler));
/*
* Percorre casamento do padrao, cria uma
* referencia de GitHubHome,
* populando e adicionando lista listGitHubCloneUrl
*/
while (this.matcher.find()) {
// Cria referencia do Bean de menu da home.
GitHubHome gitHubHome =
new GitHubHome();
// Seta Valores para a referencia do bean.
gitHubHome.setUrl(this.matcher.group(1));
gitHubHome.setTitle(this.matcher.group(2));
// Adiciona a referencia atual a lista de itens
// de menu.
this.listGitHubHome.add(gitHubHome);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// Fecha a conexao de httpclient.
httpclient.getConnectionManager().shutdown();
}
/ 48
return this.listGitHubHome;
}
// Outros mdotos...
Mo na massa: Fase 3
maes.
@Path(/github)
public final class GitHubService {
/**
* Metodo do servico que retorna links da pagina
principal do github.com
* ACESSAR DA SEGUINTE FORMA: http://
localhost:8080/crawler/service/github/
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
public Map<String, List<GitHubHome>>
findMenuHome() {
// Dominio do github.
String gitHubHomeDomain =
IGitHubSearchEngine.DOMAIN;
// Cria referencia para map de objetos GitHubHome.
Map<String, List<GitHubHome>> menuHome =
new HashMap<String, List<GitHubHome>>();
// Cria referencia para GitHubSearchEngine.
IGitHubSearchEngine gitHub =
new GitHubSearchEngine(new CompileRegex());
/*
Consideraes finais
/referncias
> Mastering Regular Expressions (Jeffrey Friedl).
> Livro - Expresses Regulares: Uma Abordagem Divertida
(Aurelio Marinho Jargas)
> Web Data Mining: Exploring Hyperlinks, Contents, and