Sei sulla pagina 1di 8

web crawler_

Web crawler em Java


coleta e filtragem de
contedo da Web
Conhea o conceito de web crawler e aprenda como criar um
agente especializado utilizando tecnologias
Java, HttpComponents e JAX-RS

D ado o volume
atual de dados
existentes na Web,
mtica de cdigos, minerao de endereos de e-mail,
coleta de contedos especficos para cotao de preos
de um determinado produto ou servio e tambm pode
um processo auto- ser desenvolvido para agregar dados de diversas fontes
mtico e metdi- da internet podendo persistir essas informaes em um
co de indexao banco de dados.
de contedo se Esses agentes no esto limitados a uma linguagem
especfica, na verdade, desde que seja possvel extrair
faz extrema-
e aplicar expresses regulares em cima dos contedos
mente ne-
obtidos, qualquer linguagem pode ser utilizada para a
cessrio.
implementao de web crawlers. No entanto, agora, no
E nesse estamos levando em considerao a viabilidade de se
cenrio implementar um crawler em cada linguagem. Cada uma
que o Web possui suas particularidades, o que pode dificultar ou
crawler se faz facilitar o desenvolvimento. Dito isso, para este artigo o
presente buscando, fil- Java foi a linguagem escolhida apenas por familiaridade
trando e muitas vezes persistindo e convenincia. O que no ser um problema, j que os
contedo. Um dos mais poderosos web princpios gerais para qualquer linguagem estaro pre-
crawlers conhecidos o googlebot, o sentes.
crawler web da Google, ele respon-
svel por vasculhar a web, procurando O problema da informao
por novas pginas para indexar e ana- Para entendermos o porqu da prtica do cra-
lisar se as pginas j existentes foram wling, precisamos falar um pouco sobre o desenvol-
devidamente atualizadas. vimento da internet. No iremos abordar a questo
Um Web crawler, que tambm co- de forma tcnica, pois o que importante no tan-
nhecido como web spider ou web robot,
to o como, mas sim o quanto.
e um agente de software utilizado para
De acordo com a consultoria Jess3, o nmero de
automatizar pesquisa, captura e extrao
usurios da rede em 1995 j era pouca coisa maior
de dados. Trafegados geralmente em protocolos HTTP
junto com o modelo TCP/IP, a maioria dos robots de- que 45 milhes de pessoas e, de acordo com a mesma
senvolvidos so voltados para a web tradicional onde consultoria, o nmero em setembro de 2009 j era de
documentos html conectados por hyperlinks, tags e pa- 1,73 bilhes de pessoas. De qualquer ponto de vista
lavras chave so usados para rastrear e atender neces- esse um nmero impressionante, mas que no diz
sidades especficas como: down- muita coisa sozinho. No entanto, se juntarmos a ele
load de imagens e o nmero de informao disponvel atravs da web
arquivos, va- teremos um problema real.
lidao Uma pesquisa realizada pela University of Sou-
auto- thern California intitulada The Worlds Technolo-
gical Capacity to Store, Communicate, and Compute
Information, chegou a concluso que, em 2002, a

/ 42
Rodrigo Ribeiro | rdccr05@gmail.com
Atua h nove anos com anlise e desenvolvimento de sistemas. Bacharel em Sistemas de Informao e Especialista em Desenvolvi-
mento de Sistemas Web pelo IESAM. Possui certificaes internacionais SCJP e OCWCD. Atualmente trabalha como consultor Java
e PHP na Discover Technology.

Luderson Costa | luderson@gmail.com


Atua h um ano como desenvolvedor Objective-C e PHP. Cursou at o terceiro ano de Cincias da Computao pela UNIC, MBA em
mercado de capitais. Atualmente trabalha como consultor PHP/Magento na Discover Technology.

Neste artigo abordaremos um pouco sobre a problemtica que nos


leva a pensar em indexadores automticos, os principais conceitos
sobre o que um Web crawler, as tecnologias utilizadas como exem-
plo e sua aplicao prtica, num elemento especializado que far a
extrao de algumas informaes livres de usurios do github.com,
tais como: lista de repositrios, foto do usurio, urls para clonagem
de projetos e download dos arquivos do repositrio indexado.

quantidade de informao armazenada digitalmente aplicados de forma muito especfica, dependendo


superou em quantidade toda a informao armaze- dos objetivos.
nada de forma analgica. E como a informao ana-
lgica, a informao armazenada de forma digital Requisies
precisa ser indexada para facilitar seu consumo, e Como dissemos anteriormente o crawling no
a que entra o web crawling. est amarrado ao contedo web, ele pode atuar sobre
diversos tipos de fontes. Desse modo ele no pode
O Crawling estar restrito por um protocolo especfico, como o
Dada a quantidade de informaes disponveis
na Web, impossvel fazer uma indexao de forma
manual, como se faz frequentemente em bibliotecas,
portanto, esse processo deve ser feito de forma au- Contedo
tomatizada e sistemtica. O agente responsvel por
essa tarefa normalmente chamado de Crawler, da
vem a denominao da ao que esse agente realiza,
o crawling. Crawler
O crawling no est, necessariamente, ligado
Web, no entanto nela que se faz o maior uso dele,
devido aos motivos j expostos.
A estrutura bsica de funcionamento de um cra-
wler no muito complexa, apesar do mesmo no Indexao
poder ser dito sobre sua implementao. Veja um
modelo da estrutura bsica de um crawler na figura 1.
As etapas giram em torno de uma requisio de
contedo, extrao da informao necessria, pro-
cesso de indexao e persistncia. A etapa de requi-
sio e extrao inerente a qualquer processo de Persistncia
crawling, independentemente do objetivo e tecno-
logia utilizada. J a indexao e persistncia podem
ou no ocorrer, e quando ocorrem normalmente so Figura 1 . Fluxo de um Crawler.

43 \
HTTP. verdade, ento, que se pode trabalhar em Servio e custos esto mais ligados tica. Craw-
cima de SMTP, FTP, entre outros. lers podem afetar a qualidade de repostas dos servi-
Atravs do protocolo escolhido o agente faz, en- dores ao fazerem vrias requisies em um curto es-
to, uma requisio fonte de dados, que acaba por pao de tempo. Isso afeta, ou pode afetar, a qualidade
retornar o contedo desejado, que ser trabalhado do servio prestado aos consumidores finais, os usu-
para a extrao das informaes. O protocolo utiliza- rios, deixando-os mais lentos. Eles podem aumentar
do neste artigo ser explicado de forma mais tcnica tambm o consumo de banda, o que pode gerar cus-
mais adiante. tos extras aos proprietrios de pginas.
A privacidade talvez a questo mais difcil de
Extrao atravs de Expresses Regulares se definir. Normalmente o que est disponvel na in-
H vrias formas de se extrair dados de um docu- ternet pblico. Qual a diferena entre acessar uma
mento. No entanto, ao lidar com contedo dinmi- pgina atravs do navegador ou atravs de um pro-
co provvel que aplicar expresses regulares seja a grama que varre seu contedo? Aqui, talvez, o maior
melhor forma. problema o que se faz depois com a informao
Expresses regulares so padres que lhe permi- obtida. A prtica de spam talvez exemplifique bem
tem localizar de forma flexvel alguma sequncia de esse problema. E-mails podem ser buscados atravs
caracteres. Isso significa que, com um mesmo padro, de crawlers especficos para a funo e depois usados
possvel voc localizar uma sequncia de caracteres em listas de malas diretas.
especfica em qualquer lugar de um documento. J o copyright o maior suporte legal regula-
Por exemplo, possvel localizar qualquer ocor- mentao do web crawling. Uma prtica comum aos
rncia da sequncia car dentro de um documento crawlers a cpia e armazenamento de contedo com
independentemente de fazer parte das palavras car- direitos reservados sem a permisso do proprietrio.
ro, carreta, corretor ou mesmo sozinha car. Para aqueles que querem evitar o mximo de pro-
Desse modo possvel resgatar qualquer dado que blemas legais e morais, uma recomendao seguir
seja necessrio e process-lo conforme suas necessi- as determinaes do arquivo robots.txt. Esse proto-
dades. Outro exemplo, mais prtico, a validao de colo usado largamente desde 1994 impe algumas
data, vejamos abaixo: regras para o clawling so seu domnio, determinando
o que pode ou no ser acessado. Por exemplo:
Listagem 1. Expresso regular usada para validao
User-agent *
de data.
Disallow /teste/
^([1-9]|0[1-9]|[1,2][0-9]|3[0,1])/([1-9]|1[0,1,2])/\d{4}$
Nesse caso no ser permitido fazer a leitura do
Esse padro valida qualquer data no formato contedo do diretrio teste, e qualquer um de seus
99/99/9999, desse modo possvel confirmar se subdiretrios.
algum campo de data foi digitado corretamente, ou No entanto bom lembrar que a leitura e obedi-
se existe alguma data no contedo de um documento. ncia aos parmetros desse arquivo no obrigatria,
A correta aplicao das expresses regulares ser apenas uma boa prtica para aqueles que desenvol-
determinante na eficincia de um Crawler, tanto em vem crawlers.
sua abrangncia quanto no retorno do contedo pro-
curado. Programando um Web Crawler
O HTTP (Hyper-Text Transfer Protocol) talvez
Questes Legais o protocolo mais importante usado na World Wide
As questes de legalidade da prtica do web cra- Web. Navegadores de internet, Web Services e o cres-
wling so, ainda, obscuras. E aqui deve ficar claro o cimento da computao em rede continua a expandir
que foi dito, isso vale principalmente para o contedo o papel do HTTP, e com isso o aumento do nmero
proveniente da Web. J que pode existir um crawler de aplicaes que necessitem de suporte a este pro-
varrendo a intranet de uma empresa, o que mantm tocolo. A web um campo bastante interessante para
os assuntos referentes ao acesso ao contedo, nesse pesquisas de minerao de dados, devido a grande
caso, restrito a uma esfera no pblica. quantidade de informao disponvel na internet.
Nas questes do contedo proveniente da inter- Uma tcnica bastante conhecida o Data Mining,
net, a legislao prpria de cada pas, o que aumen- que consiste no processo de descobrir informaes
ta muito as variantes. De qualquer forma possvel relevantes, como padres, associaes, mudanas
dividir essas questes em ticas e de lei positivada. e estruturas, em grandes quantidades de dados ar-
Nessa diviso possvel encontrar, pelo menos, mazenados em repositrios de informao. Fazendo
quatro questes importantes: servio, custo, privaci- uma converso para o contexto do artigo, a tcnica
dade e copyright. utilizada seria o Web Mining, que pode se entender

/ 44
como uma extenso de Data Mining aplicado a dados HttpComponents da Apache
da internet. O HttpComponents da Apache proporciona um
robusto suporte para protocolos HTTP, possui com-
O que Web Mining? ponentes com poder para construir aplicativos clien-
Web Mining envolve tcnicas de recuperao de te e servidor, como navegadores web, web crawlers,
Informao, estatstica, inteligncia articial e mine- proxies HTTP, comunicao distribuda etc. Entre os
rao de dados. uma maneira usada para descobrir componentes destacam-se o HttpCore, que atua no
e extrair automaticamente dados de servios e docu- baixo nvel de transporte HTTP e que pode ser usado
mentos disponveis na internet, em geral, as princi- para construir cliente personalizado, servios do lado
pais tarefas de web mining so: do servidor e suporte a modelo de I/O. HttpClient,
Busca de Documentos: a tcnica usada nessa um agente com base no httpcore, compatvel com
tarefa a de Recuperao de Informao que aplicaes HTTP fornece componentes reutilizveis
consiste no processo de extrair dados a partir para a autenticao do cliente, manter estado e ge-
de sites web se valendo do contedo de docu- renciamento de conexes, consumo de contedo
mentos HTML, navegando entre palavras cha- html etc.
ves e tags eliminando-as e recuperando os tex-
tos contidos nessas estruturas. O Web Crawler
Seleo e pr-processamento: o pr-processa- Nesta fase do artigo, iremos desenrolar o desen-
mento envolve qualquer tipo de transforma- volvimento do web crawler, a tarefa de web mining
o da informao obtida na busca, como, por do nosso exemplo ser do tipo busca de documentos
exemplo, corte de textos. e ser utilizado o componente HttpClient da Apache
Generalizao: com a utilizao de tcnicas de com o recurso para consumo de pginas html, Ex-
inteligncia artificial e minerao de dados, presses Regulares para a recuperao especfica da
possui a tarefa de descobrir de forma autom- informao e criaremos um websevice com JAX-RS
tica padres de um ou entre vrios sites web. para disponibilizar os dados recuperados pelo agen-
Anlise: a anlise aplicada geralmente em to- te de software. Sero extradas algumas informaes
das as tarefas que consiste em validar e inter-livres de usurios do github.com. O agente ser res-
pretar os padres minerados. ponsvel por capturar o avatar, lista de repositrios,
os links para comandos git clone de projetos e a url
Protocolo HTTP + JAVA para download dos arquivos ZIP do repositrio inde-
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 pgi-
nection 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 \
Agora o prximo passo criar a regex para extrair contedo Mo na massa: Fase 2
especfico da pgina de usurios do github. Vamos avaliar a
Agora com as expresses regulares devidamente
prxima url: https://github.com/rdccr e extrair o avatar e o
criadas vamos comear a desenvolver programatica-
link para os repositrios. Veja figura 3.
mente o web crawler. Na fase 2 iremos criar os beans
Listagem 3. Expresses regulares usadas para extrair que iro mapear os resultados capturados e o motor
o avatar e a url de repositrios do usurio github. de busca do crawler. Seguem abaixo os fragmentos de
cdigo com a estrutura dos beans.
AVATARED: <div\\sclass=\avatared\>[^>]*?<a\\
shref=\(.*?)\ Listagem 5. Fragmentos de cdigo com a estrutura
REPOSITORIES_TAB: [^<a\\shref=\].*?\\?tab=repositories dos beans.

//Bean responsavel por mapear a home do github.


Nosso ltimo passo criar a expresso para extrair a lista
public final class GitHubHome implements Serializable {
de repositrios de https://github.com/rdccr/repositories e
private static final long serialVersionUID = 1L;
seus respectivos contedos. Como na figura 4.
private String title;
Listagem 4. Expresses regulares usadas para extrair private String url;
// Getters e Setters
a lista de repositrios e contedo de cada repositrio.
}
REPOSITORIES_LIST: <h3>[^>]*?<span[^>]*?>.*?</
span>[^>]*?<a\\shref=\(.*?)\>(.*?)</a>[^>]*?</h3> //Bean responsavel por mapear repositorio.
DOWNLOAD_ZIP: <a\\shref=\(.*?)\[^>]*?><span[^>]*?></ public final class GitHubRepository implements
span>ZIP</a> Serializable {
CLONE_URL: <[^>]*?\\sclass=\(?:http_clone_url|public_ private static final long serialVersionUID = 1L;
clone_url|private_clone_url)[^>]*?\>[^>]*?<a\\ private String title;
shref=\(.*?)\[^>]*?>(.*?)</a></[^>]*?> private String url;
private String zip;
// Getters e Setters
}

//Bean responsavel por mapear links para comandos git


clone.
public final class GitHubCloneUrl implements
Serializable {
private static final long serialVersionUID = 1L;
private String title;
private String url;
// Getters e Setters
}
//Objeto responsavel por mapear resultado do github.
public final class GitHub implements Serializable {
private static final long serialVersionUID = 1L;

Figura 3. Pgina carregada pela url https://github.com/rdccr

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
final String DOMAIN = https://github.com;
private List<GitHubRepository> repositories;
private List<GitHubCloneUrl> cloneUrls; // Clausula para executar de pesquisa padrao.
private String urlAvatared; GitHub search(HttpClient httpclient, HttpGet httpget,
private String urlTabRepositories; ResponseHandler<String> responseHandler);
// Getters e Setters
} // Clausula para buscar foto de usuario github.
/*Constantes regex para parseamento do github. */ String findUrlAvatared(HttpClient httpclient, HttpGet
public final class GitHubPattern { httpget, ResponseHandler<String>
// Expressao usada para recuperar pagina de repositorios. responseHandler);
public static final String REPOSITORIES_TAB =
[^<a\\shref=\].*?\\?tab=repositories; // Clausula para buscar url parent da busca de
// Expressao usada para recuperar foto do usuario. repositorios
public static final String AVATARED = String findUrlTabRepositories(HttpClient httpclient,
<div\\sclass=\avatared\>[^>]*?<a\\shref=\(.*?)\; HttpGet httpget, ResponseHandler<String>
// Expressao usada para recuperar lista de repositorios. responseHandler);
public static final String REPOSITORIES_LIST =
<h3>[^>]*?<span[^>]*?>.*?</span>[^>]*? // Clausula para buscar url de arquivo ZIP de
<a\\shref=\(.*?)\>(.*?)</a>[^>]*?</h3>; repositorio.
// Expressao usada para recuperar arquivo zip para String downloadZipFile(HttpClient httpclient, HttpGet
download. httpget, ResponseHandler<String>
public static final String DOWNLOAD_ZIP = responseHandler);
<a\\shref=\(.*?)\[^>]*?><span[^>]*?></span>
ZIP</a>; // Clausula para buscar links para comandos git clone.
// Expressao usada para recuperar links para o List<GitHubCloneUrl> findCloneUrls(HttpClient
comando git clone. httpclient, HttpGet httpget,ResponseHandler
public static final String CLONE_URL = <String> responseHandler);
<[^>]*?\\sclass=\(?:http_clone_url|public_clone_
url|private_clone_url)[^>]*?\>[^>]*?<a\\ // Clausula para buscar links da pagina principal do
shref=\(.*?)\[^>]*?>(.*?)</a></[^>]*?>; github.
// Expressao usada para recuperar menu principal da List<GitHubHome> findMenuGitHubHome(HttpClient
home do github. httpclient, HttpGet httpget,
public static final String GITHUB_HOME = ResponseHandler<String> responseHandler);
<[^>]*?class=\(?:explore|search|features|blog) }
[^>]*?\><a[^>]href=\(.*?)>(.*?)</a></[^>]*?>;
// Expressao usada para recuperar erro caso usuario
A interface descrita acima representa a estrutura do
submetido nao exista agente e os mtodos que sero implementados pos-
suem os seguintes argumentos: HttpClient respons-
} vel por trafegar no protocolo http, HttpGet respons-
vel por consumir via get a url que ser utilizada pelo
cliente http e o ResponseHandler<String> respons-
vel pela resposta do contedo html acessado. A mani-
O prximo fragmento de cdigo ser referente ao da
pulao desses objetos a base para o funcionamen-
interface IGitHubSearchEngine que foi criada para
to do web crawler desenvolvido.
conter o contrato com as implementaes das assi-
naturas search(), findUrlAvatared(), findUrlTabRepo- Listagem 7. Implementao do mtodo findMenuGi-
sitories(), downloadZipFile(), findCloneUrls(), find- tHubHome().
MenuGitHubHome() que o motor de busca do crawler // WebSpider GitHubSearchEngine.
dever seguir para seu funcionamento. Segue abaixo: public final class GitHubSearchEngine implements
IGitHubSearchEngine {
Listagem 6. Contratos que devem ser seguidos pelo
Crawler. // Referencias para motor de busca
public interface IGitHubSearchEngine { private ICompileRegex regex;
// Constant com o dominio github. private Matcher matcher;

47 \
return this.listGitHubHome;
//Variaveis de instancia }
private String urlTabRepositories; // Outros mdotos...
private String urlAvatared; }
private String urlDownloadZipFile;
private List<GitHubRepository> listGitHubRepository; Analisando o cdigo da Listagem 3, podemos verificar
private List<GitHubCloneUrl> listGitHubCloneUrl; que a lgica de busca proposta funciona da seguinte
private final GitHub gitHub; forma. Em uma classe criada para encapsular as ta-
private List<GitHubHome> listGitHubHome; refas de compilao da expresso regular, passado
como parmetro o padro a ser usado referenciado
// Construtor com argumento pela constante GitHubPattern.GITHUB_HOME e a
public GitHubSearchEngine(ICompileRegex regex) { resposta da execuo do client http representado por
this.regex = regex; httpclient.execute(httpget, responseHandler). O re-
this.gitHub = new GitHub(); sultado desse casamento de dados ser passado para
} um objeto matcher e, caso this.matcher.find() seja
// outros mtodos... verdadeiro, significa que a expresso regular obte-
ve retorno, sero adicionadas novas informaes ao
/** objeto GitHubHome. Note que no finally fechamos a
* Metodo utilizado para recuperar lista de links da conexo do HttpClient.
home do github.
*/
Mo na massa: Fase 3
public List<GitHubHome> findMenuGitHubHome(
Nesta ltima fase vamos criar um webservice
HttpClient httpclient, HttpGet httpget,
para disponibilizar acesso s aes do web crawler,
ResponseHandler<String> responseHandler) {
try {
podendo assim as informaes serem consumidas e,
// Cria referencia para lista de objetos
caso seja necessrio, persistidas em algum modelo
GitHubHome. de dados. Para a criao do webservice rest ser uti-
this.listGitHubHome = lizado o JAX-RS com Jersey para gerar um retorno no
new ArrayList<GitHubHome>(); formato json. Segue trecho do cdigo:
// Executa regex na resposta do httpclient.
Listagem 8. Web service para disponibilizar as infor-
this.matcher = regex.execute(
maes.
GitHubPattern.GITHUB_HOME, httpclient.
execute(httpget, responseHandler)); @Path(/github)
/* public final class GitHubService {
* Percorre casamento do padrao, cria uma
* referencia de GitHubHome, /**
* populando e adicionando lista listGitHubCloneUrl * Metodo do servico que retorna links da pagina
*/ principal do github.com
while (this.matcher.find()) { * ACESSAR DA SEGUINTE FORMA: http://
localhost:8080/crawler/service/github/
// Cria referencia do Bean de menu da home.
*/
GitHubHome gitHubHome =
@GET
new GitHubHome(); @Produces(MediaType.APPLICATION_JSON)
// Seta Valores para a referencia do bean. public Map<String, List<GitHubHome>>
gitHubHome.setUrl(this.matcher.group(1)); findMenuHome() {
gitHubHome.setTitle(this.matcher.group(2));
// Adiciona a referencia atual a lista de itens // Dominio do github.
// de menu. String gitHubHomeDomain =
this.listGitHubHome.add(gitHubHome); IGitHubSearchEngine.DOMAIN;
}
} catch (ClientProtocolException e) { // Cria referencia para map de objetos GitHubHome.
e.printStackTrace(); Map<String, List<GitHubHome>> menuHome =
new HashMap<String, List<GitHubHome>>();
} catch (IOException e) { // Cria referencia para GitHubSearchEngine.
e.printStackTrace(); IGitHubSearchEngine gitHub =
} finally { new GitHubSearchEngine(new CompileRegex());
// Fecha a conexao de httpclient.
httpclient.getConnectionManager().shutdown(); /*
}

/ 48
thub/para extrair os itens do menu principal da home
* Cria referencia listGitHubHome para
do site github, ou http://localhost:8080/Spider/ser-
lista de objetos GitHubHome com o
* retorno de
vice/github/seu-usuariopara extrair sua foto, lista de
gitHub.findMenuGitHubHome(). repositories e arquivos para download. Veja figuras 5
*/ e 6.
List<GitHubHome> listGitHubHome =
gitHub.findMenuGitHubHome( Consideraes finais
new DefaultHttpClient(), O propsito deste artigo foi mostrar o porqu da
new HttpGet(gitHubHomeDomain),
prtica do web crawling e sua importncia no contex-
new BasicResponseHandler());
to da web atual, levando em considerao seu tama-
// Adiciona valor ao map. nho e necessidade do consumo de seu contedo.
menuHome.put(gitHubHomeDomain, Vimos tambm os conceitos bsicos de qualquer
listGitHubHome); crawler, independentemente de linguagem e tecno-
logia. Aproveitamos e exemplificamos de forma pr-
return menuHome; tica a implementao em Java de um agente espec-
} fico, que faz a captura e filtragem de dados, livres, do
}
github.com.
Esperamos que assim o leitor tenha a base para
Para acessar os servios localmente digite no seu iniciar uma implementao de um crawler em qual-
navegador: http://localhost:8080/Spider/service/gi- quer linguagem.

/para saber mais


> Na edio nmero 24 da revista MundoJ abordada a
utilizao de Expresses Regulares com java.

/referncias
> Mastering Regular Expressions (Jeffrey Friedl).

> Livro - Expresses Regulares: Uma Abordagem Divertida


(Aurelio Marinho Jargas)

> Web Data Mining: Exploring Hyperlinks, Contents, and


Usage Data (Bing Liu)
Figura 5. Resposta do webservice rest acessado pela url http://
localhost:8080/Spider/service/github/seu-usuario exibindo o json > http://www.scribd.com/doc/52799786/Definicao-Web-
com o contedo extrado. Mining

> http://www.dct.ufms.br/~mzanusso/Data_Mining.htm

> http://hc.apache.org/

> http://regexpal.com/

> http://news.usc.edu/#!/article/29360/How-Much-
Information-Is-There-in-the-World

> http://www.sciencemag.org/content/332/6025/60

> http://jess3.com

> http://en.wikipedia.org/wiki/Web_scraping#Legal_issues

> Web Crawling Ethics Revisited: Cost, Privacy and Denial


of Service1,

> http://carl.cs.indiana.edu/fil/WebSec/mining_social_
networks.html

Figura 6. Estrutura de pacotes do web crawler.

49 \

Potrebbero piacerti anche