uma abordagem para capturar notÍcias … · de posse da gravação de um telejornal, por exemplo,...

21
BRUNO STUELP FILHO UMA ABORDAGEM PARA CAPTURAR NOTÍCIAS ESPECÍFICAS PUBLICADAS NA INTERNET USANDO WEB-CRAWLERS CURITIBA 2013

Upload: ngonhan

Post on 09-Feb-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

1

BRUNO STUELP FILHO

UMA ABORDAGEM PARA CAPTURAR NOTÍCIAS ESPECÍFICAS PUBLICADAS

NA INTERNET USANDO WEB-CRAWLERS

CURITIBA

2013

2

BRUNO STUELP FILHO

BUSCA DE INFORMAÇÕES NA INTERNET ATRÁVES DE WEB-CRAWLERS

Trabalho de graduação apresentado como

requisito parcial a obtenção de grau de Bacharel

em Ciência da Computação. Departamento de

Informática, Setor de Ciências Exatas,

Universidade Federal do Paraná.

Orientador: Prof. Bruno Müller Junior,

Departamento de Informática, UFPR.

CURITIBA

2013

3

Sumário

1 Introdução ......................................................................................................... 4

2 Fundamentação teórica ..................................................................................... 4

2.1 Clipping de notícias ..................................................................................................... 5

2.2 Linguagem de marcação HTML .................................................................................. 6

2.3 Agendamentos automáticos de tarefas em Linux .......................................................... 6

2.4 Web-crawler ............................................................................................................... 7

2.5 Java e o paradigma da orientação a objetos ................................................................. 7

2.6 Softwares de captura de conteúdo, indexação e projetos relacionados .......................... 9

2.6.1 Aplicativos de captura de dados ............................................................................................ 9

2.6.2 Algoritmo para captura de conteúdo ................................................................................... 10

2.6.3 Captura de trechos HTML com Jsoup ................................................................................ 10

2.6.4 Aplicativos reais e seus resultados ....................................................................................... 11

2.7 Objetivos ...................................................................................................................12

3 Descrição conceitual do modelo ....................................................................... 12

4 Conceitos e detalhes de implementação ........................................................... 15

5 Conclusão ......................................................................................................... 18

6 Bibliografia ...................................................................................................... 19

4

1 Introdução

Hoje vivemos em um mundo altamente conectado, dinâmico e com muita informação

disponível, principalmente no espaço virtual dos computadores. Essa velocidade nos permite saber

de acontecimentos quase que em tempo real, mesmo quando uma determinada situação acontece do

outro lado do planeta. De 1986 até 2007 já eram acumulados 295 trilhões de megabytes de

informações em diferentes dispositivos tecnológicos[1]. Dados mostram que em 2012 esse número

já alcançava 10 petabytes de dados[2].

As grandes corporações querem saber exatamente o que está sendo publicado ou comentado

sobre sua marca. Com isso, elas podem tomar decisões estratégicas, de marketing, estreitar seu

relacionamento com seus clientes ou fazer investimentos mais seguros no seu segmento de

mercado. Monitorar os passos das suas concorrentes também pode ser uma valiosa arma para se

sobressair no mercado competitivo de hoje em dia.

No entanto, muitas das informações disponíveis da grande rede não servem a todos os

interessados. Para isto, é importante que existam filtros de dados que tenham a capacidade de

selecionar apenas o conteúdo que é mais relevante. Se uma empresa tem interesse nos assuntos

relacionados à economia e outra empresa se interesse por petróleo e gás, cada uma delas vai querer

selecionar apenas o que lhe diz respeito, em meio a milhares de notícias. O grande desafio está

exatamente em como prover tais dados de uma maneira rápida e eficiente para qualquer empresa de

qualquer segmento.

O presente trabalho irá descrever como criar uma ferramenta automatizada para capturar

conteúdo publicado em diversos veículos online. Também mostraremos algumas formas de entregar

estes dados aos diversos interessados.

2 Fundamentação teórica

Neste capítulo, iremos abordar alguns conceitos importantes que serão usados ao longo do

texto. A seção 2.1 abordará uma importante área do jornalismo e comunicação denominada

Clipping. As seções 2.2 e 2.3 abordam algumas tecnologias utilizadas na criação dos robôs de

captura de conteúdo. A seção 2.4 apresenta a definição do mecanismo principal da captura de

conteúdo, denominado web-crawler. A seção 2.5 trará uma introdução à linguagem JAVA e as

principais bibliotecas usadas na implementação do software. Na seção 2.6 apresentaremos alguns

processos e softwares que já existem para trabalhar com clipping de notícias. Na seção 2.7

reforçaremos os objetivos e necessidades que nos levam a desenvolver um software para captura de

conteúdos publicados na web.

5

2.1 Clipping de notícias

Clipping é uma expressão idiomática de origem inglesa que define o processo de selecionar

informações semelhantes em diversos meios de comunicação e montar um apanhado geral com

apenas aquilo que nos interessa. Podemos elaborar um Clipping de notícias para diversos

segmentos jornalísticos, como rádio, TV, jornais e revistas, tanto impressos quanto online.

Uma das maneiras de se organizar uma clipagem de notícias divulgadas em rádios e TVs

seria gravar os programas que interessem para depois serem analisados. De posse da gravação de

um telejornal, por exemplo, uma pessoa precisa escutar todo seu conteúdo, recortar os trechos

referentes a cada notícia, cadastrar alguns dados essenciais, como o tema principal da notícia, o

nome do veículo e a data e hora da publicação. Este processo humano, denominado “decupagem de

notícias”, é um trabalho maçante e monótono, implicando na dificuldade de se manter um quadro

de colaboradores permanente, pois a função pouco agrega à experiência profissional, além de ser

muito repetitiva. Porém já existem aplicativos[3] que analisam a gravação e extraem seu conteúdo

em texto, dinamizando o processo.

Antes da popularização da publicação de notícias na web, montar um Clipping de notícias

para veículos impressos também era um processo bastante manual. Pilhas de jornais e revistas eram

analisadas um a um por grandes equipes em busca de termos específicos: se estes fossem

localizados, a notícia era separada, redigitada ou escaneada e depois enviada ao solicitante.

Hoje em dia, com o avanço da internet e sua contribuição para os sistemas de informação, o

termo “e-clipping” vêm ganhando força junto às assessorias de comunicação. No Brasil esta

nomenclatura foi primeiramente utilizada em e-books criados a partir de recortes de notícias e

informações disponíveis na Internet e por jornalistas na década de noventa. Na época havia a

necessidade de se obter um termo que designasse a utilização excessiva dos comandos Ctrl+C e

Ctrl+V, presentes no principal Sistema Operacional da época e seu respectivo navegador, dando

início à “ditadura do Ctrl C + Ctrl V”[4]. Hoje em dia, a grande maioria dos veículos que publicam

conteúdo impresso também publicam estes conteúdos em seus portais online. Com isso, podemos

criar meios inteligentes de ler e capturar estes dados de maneira rápida e automática, permitindo

resolver os grandes problemas relacionados ao Clipping de notícias: velocidade na captura e

disponibilização das informações bem como cobrir 100% dos veículos de interesse[5]. Esta

automatização implica, também, na desnecessidade da grande quantidade de pessoas realizando um

trabalho extremamente burocrático e com grandes riscos de erros.

Convém explicar que um Clipping de notícias não ofende o direito autoral[6] ou

propriedade intelectual, pois trata da difusão de notícias, o que é prática livre, tanto pelos acordos

internacionais firmados pelo Brasil, como pela própria legislação interna do país. A esse respeito, a

6

lei 9.610[7] é clara quando diz que não constitui ofensa aos direitos autorais à difusão de artigos e

informações publicadas na imprensa, desde que dada a fonte e mencionando-se o nome dos autores,

quando esta for assinada.

2.2 Linguagem de marcação HTML

A linguagem de marcação HTML (acrônimo de Hypertext Markup Language) é o meio

básico para escrever conteúdos para se publicar na internet[8]. Documentos HTML são

interpretados pelos navegadores, mostrando seu resultado na tela do computador. Estes documentos

são os responsáveis por montar todo o layout da sua página web. Todo arquivo HTML deve ter a

extensão .html como, por exemplo, index.html.

Documentos HTML são compostos por conjuntos de etiquetas - mais conhecidas como tags -

escritas entre parênteses angulares (< e >) e que definem toda a formatação daquilo que será

mostrado em tela. Uma tag pode possuir atributos, que servem para mudar a largura, tamanho e cor

de fonte, posicionamento em tela, formatação de texto entre diversos outros aspectos. Outra

característica dessa linguagem de marcação é o comportamento hierárquico das suas tags, ou seja,

podemos ter uma tag pai com várias tags filhas. A figura 1 exemplifica este fato:

Figura 1: exemplo de hierarquia em código HTML.

A tag com hierarquia mais alta é a <div>, que tem como filhas <span>,<p> e <h1>. Essa

relação pode ser mais interna, ou seja, podemos, também, considerar <span> como tag mãe de <p>

e <h1>.

Para conhecer mais detalhes sobre esta linguagem de marcação, consulte

http://www.w3.org/html ou http://www.w3schools.com/html para visão geral do HTML tradicional

ou http://www.w3c.br/cursos/html5/conteudo/ para a nova versão denominada HTML 5.

2.3 Agendamentos automáticos de tarefas em Linux

Para iniciar automaticamente a execução dos robôs de captura, é necessário usar uma

ferramenta de agendamento de tarefas. O ambiente UNIX provê diversos programas para este

<div> <span> <p> Exemplo <h1>HTML</h1></p> </span> </div>

7

propósito, sendo os mais conhecidos Fcron1, Anacron

2 e Cron

3. Qualquer um deles poderiam ser

utilizados, porém optamos pelo Cron porque herdamos os agendamentos dos robôs antigos que

iriam ser reescritos em Java. Assim, não precisaríamos reagendar todos os robôs novamente. Para

maiores detalhes sobre como utilizar estas tecnologias devemos visitar a página dos

desenvolvedores.

2.4 Web-crawler

Um Web-crawler - ou rastreador web em tradução livre - é um software que navega pela

internet, analisando uma parte ou o conteúdo total das páginas visitadas[9]. Em geral, ele começa

seu processo de leitura com uma URL principal. À medida que o software lê o conteúdo desse

endereço, todos os links contidos na página principal são identificados e adicionados na lista de

URLs que serão visitadas. Este processo recursivo é, de acordo com um conjunto de regras pré-

definidas, executado até que todos os endereços sejam lidos. Parte ou todo o conteúdo que se está

lendo é armazenado para avaliação posterior, como, por exemplo, indexar seu conteúdo para prover

buscar mais rápidas, validar código HTML de grandes sites ou minerar dados específicos dentro das

páginas, como os links de e-mail[9].

Para este trabalho, no entanto, explicaremos como esta técnica poderia ser útil para capturar

notícias publicadas em diversos veículos online, a fim de criar um clipping de notícias completo

para disponibilizar a quem se interessar.

2.5 Java e o paradigma da orientação a objetos

Um programa de computador é uma coleção de instruções finitas e não ambíguas que

descrevem uma tarefa a ser realizada por um computador. Estes comandos fazem parte de uma

linguagem de programação. Java[10] é uma linguagem de programação que utiliza do paradigma de

orientação a objetos. Este paradigma tem por conceitos básicos seis itens principais[11]:

Classe: é uma unidade de programa que abriga métodos. Uma classe define o

comportamento dos objetos através de métodos e os estados possíveis destes objetos

através de atributos. Em outras palavras, uma classe descreve os serviços providos por

seus objetos e quais informações ele pode armazenar. Podemos ter, por exemplo, uma

classe denominada “Veículo”.

1 http://fcron.free.fr/

2 http://sourceforge.net/projects/anacron/

3 http://wiki.gentoo.org/wiki/Cron

8

Objeto: um objeto é um elemento do mundo real. O paradigma da orientação a objetos

tenta estreitar a relação entre programação e mundo real. Objetos possuem

comportamentos, que é a forma com que ele reage a estímulos. Objetos também tem

atributos, que são suas características básicas, que podem mudar de acordo com seu

comportamento. Do nosso exemplo anterior, Mercedes, Fusca e Kombi são objetos da

classe Veículo. Podemos considerar como atributos dos objetos da classe Veiculo a

quantidade de portas, potência do motor, quantidade de marchas e tipo de combustível.

Já os comportamentos básicos de um objeto da classe Veículo podem ser a aceleração,

troca de marchas ou frenagem.

Método: são as declarações dos comportamentos que cada objeto pode ter. Um objeto

exibe algum comportamento (executa uma operação) quando recebe um estímulo de

outro objeto, enviando uma mensagem para ele. Esta mensagem é uma solicitação para

que seja executado uma das rotinas existentes nos métodos da classe. No nosso exemplo,

podemos ter o método acelerar, que vai ser disparado quando pisarmos no pedal do

acelerador.

Herança: é a habilidade de se derivar alguma coisa específica a partir de algo mais

genérico. Nós encontramos essa habilidade ou capacidade no nosso cotidiano. Um Pálio,

estacionado na frente da garagem do seu vizinho é uma instância específica da categoria

Carro, mais genérica, por exemplo. Da mesma forma, uma Honda CG 125 Cargo é uma

instância específica da categoria mais genérica Moto. Se levarmos as categorias Carro e

Moto para um outro nível mais elevado, as duas se relacionarão uma com a outra por

serem instâncias específicas de uma categoria mais genérica ainda do que elas: a

categoria Veículo. Em outras palavras, carros e motos são veículos. O atributo

velocidade, por exemplo, é comum a ambos os veículos, carros e motos. Para não se

repetir código que dizem a mesma coisa, herda-se de uma superclasse os atributos e

comportamento em comuns aos vários objetos encontrados no projeto.

Encapsulamento: é a capacidade de ocultar detalhes de implementação por parte de

entidades de manipulação de dados. O encapsulamento é um dos grandes trunfos da

programação orientada a objetos em relação a estrutural. A grande vantagem é que o

9

encapsulamento disponibiliza o objeto para uso sem que você precise conhecer como ele

funcione internamente, nem como armazena internamento os dados que você recupera.

No nosso exemplo, não é necessário saber como o veículo procede para acelerar o carro

quando o comando é dado pelo pedal de acelerador. No entanto, você terá a resposta se

pisar nesse dispositivo.

Polimorfismo: é a capacidade de uma variável se referir em tempo de execução a objetos

de diversas classes. Também pode ser definido como a capacidade que objetos

diferentes tem de responder a uma mesma mensagem. O polimorfismo ocorre quando

um método que já foi definido no ancestral é redefinido no descendente com um

comportamento diferente.

2.6 Softwares de captura de conteúdo, indexação e projetos relacionados

Existem diversos softwares que efetuam captura de conteúdo na web. Essa captura pode ser

a cópia integral de sites e seus arquivos, a procura de palavras em páginas web ou busca de

conteúdos específicos em diversos locais diferentes, como sites ou redes sociais. A seção 2.6.1

explana sobre dois programas de computador que executam a captura bruta de dados na Internet, ou

seja, capturam todos os dados sem a possibilidade de filtragem automática de conteúdo. A seção

2.6.2 mostra um algoritmo simples para capturar conteúdo nas páginas web. A seção 2.6.3

apresenta uma biblioteca java para extração de trechos específicos dentro de arquivos HTML,

chamada JSoup. A seção 2.6.4 mostra dois aplicativos atuais e exemplos de seus resultados.

2.6.1 Aplicativos de captura de dados

O GNU Wget[12] permite o download de arquivos que compõem um website. Funciona

totalmente por linha de comando tendo diversas opções para o usuário, que podem ser consultadas

em seu manual de uso. Para baixar um site inteiro, por exemplo, utiliza-se a opção “–r”. Assim, o

programa copiará todos os arquivos que encontrar na pasta apontada pelo endereço do site bem

como todas as suas subpastas.

Este software realiza aquilo que ele se propõe, que é baixar todos os arquivos encontrados

dentro do endereço especificado. Se usássemos esta alternativa para capturar notícias, teríamos que

construir outro software para ler estes arquivos baixados e procurar dentro deles o conteúdo que

queremos, tornando o processo pouco prático. Além disso, num grande portal que publica

conteúdos regularmente, ou seja, a cada intervalo pequeno de tempo, o processo seria burocratizado

10

e lento, pois recorrentemente teríamos que baixar o site inteiro e empregar filtros para recortar

apenas aquilo que nos interessa.

O Googlebot[13] é outro exemplo de web-crawler de rastreamento da web desenvolvido

pela equipe do Google4. Inicialmente, o Googlebot realiza um rastreamento de novos sites

publicados na web, lendo o conteúdo de grandes diretórios de site, como o DMoz5. Se o programa

se deparar com uma página nova, seu endereço é incluído nos registros de índices do Google. Se o

endereço já estiver lá, ele varre a página em busca de atualizações. Num segundo momento, todos

estes dados são processados e estas informações são catalogadas e disponibilizadas para consulta

em seu site de busca.

2.6.2 Algoritmo para captura de conteúdo

Tanto o Wget quanto o Googlebot são programas muito genéricos, pois não conseguimos

direcionar sua captura a assuntos específicos, ou seja, capturamos toda a página, mas não podemos

recortar apenas um trecho que nos interessa. Podemos, portanto, escrever outros programas que

estejam mais próximos do que queremos. Um algoritmo simples que exemplifica os passos

necessários para efetuar esta tarefa está escrito abaixo:

Figura 2: algoritmo para capturar conteúdos de páginas web.

Este algoritmo realiza a captura do conteúdo HTML da URL mencionada. Porém, ainda

temos os “dados brutos”, que precisam ser filtrados para encontrarmos o que desejamos no meio de

todo o conteúdo HTML capturado.

2.6.3 Captura de trechos HTML com Jsoup

4 http://www.google.com

5 http://www.dmoz.org

1 INICIO: 2 LER endereço_URL; 3 4 enquanto (existir_novos_links) 5 dados <- busca_dados_site(endereço_URL); 6 fim_enquanto; 7 8 ESCREVE dados; 9 FIM.

11

O JSoup[14] é uma biblioteca Java que permite o recorte de trechos específicos dentro de

todo conteúdo HTML. Também dá suporte para HTML 5 e arquivos XML6. A biblioteca fornece

uma API completa para trabalhar com a extração e manipulação de dados. O programador precisa

referenciar as tags HTML para buscar os dados que devam ser manipulados.

JSoup é um programa de código aberto, distribuído sob licença MIT open source[15] e o

código fonte do projeto pode ser baixado no GitHub[16]. Para usá-la, devemos integrar a biblioteca

ao nosso projeto Java e invocar os métodos disponíveis na API para recortar o conteúdo contido em

determinada Tag HTML. Obtemos como resposta o texto puro, ou seja, sem resquícios de códigos

usados na programação web, como javascript e plugins de vídeos.

Como vimos anteriormente, a maioria das ferramentas apenas copiam o conteúdo integral de

um site ou página. Com o uso dessa ferramenta, passamos a identificar e obter apenas aquilo que

realmente interessa. Este passou a ser o grande diferencial em relação às demais ferramentas e que

norteou nossa opção por usar Java. No capítulo 3 mostraremos detalhes de como usar esta

biblioteca.

2.6.4 Aplicativos reais e seus resultados

O Observatório Web[17] é um portal criado por um grupo de pesquisadores do

Departamento de Ciência da Computação7 da Universidade Federal de Minas Gerais

8 em parceria

com a FIAT. Este projeto busca avaliar a opinião da sociedade sobre diversos temas, capturando

dados em sites de jornais, revistas, blogs além de redes sociais, como Facebook, Youtube e

Twitter[18]. As diversas opiniões dos usuários referentes a variados temas são coletadas, extraídas e

mineradas usando softwares específicos e seu resultado é avaliado por mecanismos estatísticos e

matemáticos. Com isso, é possível mapear ou interpretar qual a tendência e opiniões de parte da

população.

Um dos projetos do Observatório Web foi o Observatório Brasileirão, onde foi possível

verificar qual time era o mais mencionado no Twitter. Olympics Observatory montou nuvens de

palavras (Word-Cloud) com os principais temas mencionados sobre olimpíadas-2012. Outro projeto

foi o Observatório das Eleições 2012, que coletou dados da mesma rede e os sintetizou em gráficos

e nuvem de palavras sobre diversos aspectos, ajudando o eleitor na sua decisão de voto. Também

6 http://www.w3schools.com/xml/

7 http://www.dcc.ufmg.br/dcc/

8 http://www.ufmg.br

12

foi possível prever a se antecipar a surtos de dengue, através do projeto Observatório da Dengue,

em parceria com o Ministério da Saúde[18].

Outra ferramenta semelhante é Projeto Ei! Treinadores, desenvolvido pela IBM[19]. Este

aplicativo é uma solução que avalia o conteúdo das redes sociais relacionados a esportes,

inicialmente futebol. O primeiro teste foi efetuar a análise de grandes jogos de futebol, como a final

do mundial interclubes de 2012 entre Corinthians e Chelsea e um amistoso entre Brasil e Inglaterra,

no mesmo ano. Após estes dois pilotos, a Copa das Confederações[20] foi o palco usado para mais

testes da ferramenta. Neste momento eles ainda foram mais ousados: usaram da opinião popular

para gerar análises que poderiam auxiliar o técnico do time a tomar decisões, como escalação do

time, alterações de jogadores, táticas a serem exploradas e as perspectivas dos brasileiros em

relação ao time e técnico. Ou seja, transformaram a população brasileira em treinadores auxiliares

de futebol. Após a partida, foi elaborado um documento com a análise daquilo que foi mencionado

antes, durante e logo após o jogo[21].

2.7 Objetivos

Grandes veículos de comunicação disponibilizam diversas notícias de diferentes temas. É

um grande desafio para as assessorias de comunicação filtrar e disponibilizar com dinamismo os

assuntos que interessam estrategicamente à empresa. Tomadas de decisões pautadas em termos

concretos dão muito mais resultados positivos às corporações.

Diante de uma variedade enorme de informações e que se modificam tão rapidamente, é

fundamental para as grandes corporações saber o que está se falando sobre sua marca ou até mesmo

quais são os rumos que seu negócio tende a tomar. Com o advento da tecnologia, é possível

capturar, processar e disponibilizar informações, tendências de mercado, problemas eventuais com

produtos e até mesmo má qualidade na prestação de serviço, de maneira rápida e eficiente, não

apenas com palavras, mas usando gráficos e outras maneiras visuais de representação dos dados.

Nosso objetivo, então, é mostrar como desenvolver uma ferramenta de captura de conteúdos

publicados na internet – em especial notícias – e enviar estes dados para os responsáveis pela sua

análise.

3 Descrição conceitual do modelo

Neste capítulo, descreveremos conceitualmente os processos envolvidos na captura,

armazenamento das noticias, filtros e disponibilização dos dados para o cliente.

13

A primeira tarefa que precisamos resolver é definir aquilo que é mais interessante para o

cliente. Suponhamos que o seu interesse esteja relacionado com o segmento de agropecuária.

Precisamos, então, definir um conjunto de palavras-chaves que serão usadas posteriormente para

fazer a indexação do conteúdo capturado com aquilo que é de interesse do contratante do serviço.

Consideremos, hipoteticamente, este o conjunto de palavras-chaves: reintegração de posse, soja,

Mato Grosso e Fazenda Buruti. Com estas informações levantadas, podemos seguir para o próximo

passo.

O desenvolvimento desta solução está dividido em três macroprocessos, mostrados a seguir:

Figura 3: fluxograma das etapas envolvidas no processo de captura de notícias.

Coleta de dados: nesta etapa inicial, o robô de captura (web-crawler) é disparado através do

agendamento do crontab. Quando do seu desenvolvimento, o programador já fez uma pré-

análise do código HTML deste veículo e identificou as tags onde a notícia está publicada.

Geralmente os sites seguem um padrão de publicação, o que facilita muito todo o processo

de desenvolvimento. Consideremos o pedaço de código HTML abaixo[23]:

<article id="conteudo-principal" class="canal-media rod news">

<header>

<h1 class="pg-color10">

Justiça Federal suspende reintegração de posse em fazenda

de Mato Grosso do Sul

</h1> <div class="info-header">

14

<p class="pg-color10">

Do UOL, em São Paulo<br/>

</p>

<time class="pg-color5" datetime="2013-06-05T13:43" pubdate>

<span class="data">05/06/2013</span>13h43

<span class="separador pg-color5"> </span>

Atualizada <span class="data">05/06/2013</span>16h49

</time>

</div>

</header>

</article>

Figura 4: trecho HTML que exemplifica o código de uma notícia.

Os trechos em negrito representam dados importantes que precisam ser capturados. A

primeira parte em negrito refere-se ao título da notícia. A segunda parte ao nome do veículo que a

publicou. A terceira e a quarta estão relacionadas à data e hora da publicação.

Como o HTML se organiza de maneira hierárquica, conseguimos, então, informar ao Jsoup

o local exato onde está cada parte do texto que devemos capturar. No exemplo acima, aquilo que se

encontra dentro da tag chamada <article>, cuja tag filha é <header> e, hierarquicamente, <h1>, é o

título da notícia. A mesma ideia se aplica ao nome do veículo, por exemplo, que será encontrado

seguindo a hierarquia <article>, <header>, <div> e <p>. Assim, o trabalho da biblioteca JSoup é

recortar apenas aquilo que nos interessa, desprezando o resto de código que não nos serve.

Efetuada a leitura e recorte da notícia, visitamos o próximo link armazenado pelo web-

crawler. Repetimos esse processo de busca/recorte até que todos os links armazenados pelo web-

crawler tenham sido visitados. Ao final desse processo, temos armazenado nos arquivos XML todas

as notícias publicadas no veículo. Nesse momento já é possível analisar um grande ganho usando

Jsoup: enquanto que com as outras ferramentas nós teríamos copia integral de todo conteúdo da

página, com todas as propagandas e códigos que não nos interessam, com Jsoup temos apenas os

dados limpos. Na fase de processamento e indexação dos dados teremos arquivos bem menores

para serem analisados, economizando tempo e recurso computacional.

Cada notícia capturada é armazenada em um arquivo XML que será processado

posteriormente para ser cruzado com a lista de palavras-chaves que o cliente relacionou no seu

perfil. Definimos o modelo XML abaixo:

<?xml version=”1.0” encoding=”UTF-8”?>

<NOTICIAS>

<NOTICIA></NOTICIA>

<URL></URL>

15

<VEICULO></VEICULO>

<TITULO></TITULO>

<TEXTO_NOTICIA></TEXTO_NOTICIA>

<AUTOR></AUTOR>

<SECAO></SECAO>

<DATA></DATA>

<HORA></HORA>

</NOTICIAS>

Figura 5: modelo de arquivo XML

Extração e pré-processamento dos dados: neste momento da tarefa, já temos diversas

notícias que precisam ser cruzadas com as palavras-chaves criadas no perfil do cliente. Se

alguma palavra for encontrada no texto capturado, a notícia é indexada para o cliente. No

exemplo acima, a palavra “Mato Grosso” pode ser encontrada no título da notícia. Dessa

maneira, esse XML é lido integralmente e seus campos são armazenados num banco de

dados MySql, vinculados ao perfil do cliente para entrega posterior.

Entrega das notícias: partimos de uma notícia bruta publicada na web para termos apenas

os dados que nos interessam, sem códigos web ou qualquer outra informação que não nos

atenda. Tudo aquilo que pudemos localizar e indexar ao perfil do cliente está totalmente

disponível para ser enviado ao mesmo. Esta tarefa de entrega pode ser efetuada de diversas

maneiras. Podemos enviar os dados por e-mail, podemos gravar as informações diretamente

em um banco de dados do cliente ou podemos usar a tecnologia de web-servers para garantir

agilidade e segurança na transferência de dados. Nossa opção foi por este último justamente

pelos argumentos dados.

4 Conceitos e detalhes de implementação

Agora que já discorremos sobre o macroprocesso relacionado a este projeto de captura de

conteúdos publicados em veículos de notícias na internet, bem como sua filtragem e entrega de

dados aos clientes, vamos analisar os detalhes da implementação e mostrar como utilizar a

biblioteca Jsoup, responsável por facilitar e trazer o dinamismo necessário para tornar este projeto

viável.

Como já dissemos, Jsoup é uma biblioteca escrita na linguagem de programação java, de

fácil utilização e com um conjunto vasto de funções que auxiliam o desenvolvedor a extrair dados

de conteúdos HTML. Esse conjunto de funções, denominado de API (Application Programming

16

Interface), é um conjunto de rotinas e padrões estabelecidos por um software para utilização de

funcionalidades por aplicativos que não queiram se preocupar com detalhes de implementação de

cada função disponível na API[23]. Para fazer uso do Jsoup, basta baixa-lo diretamente do site do

desenvolvedor, associar este arquivo ao seu projeto usando a diretiva Java Build Path[24] e incluí-

la no seu projeto usando o comando import disponível na linguagem java, ou seja, não é preciso

efetuar instalações nem configurar muitas coisas dentro da sua aplicação.

O primeiro comando que deve ser escrito está relacionado com a criação de um objeto que

receberá o conteúdo da página HTML.

Document doc = Jsoup.connect("endereço da página").get(); Figura 06: comando Jsoup para conexão com página web.

Este comando significa que você está criando um objeto chamado “doc” que é do tipo

Document, ou seja, capaz de armazenar conteúdo HTML no formato associado ao Jsoup. Com o

comando connect(“URL”), informamos de qual página o conteúdo será capturado. Por fim,

declaramos a ação get() que efetivamente conecta no site e efetua a leitura integral do conteúdo

HTML que será armazenado no objeto doc. Neste momento, podemos começar nosso recorte das

informações usando a API do Jsoup.

Voltamos a considerar como exemplo o código HTML da figura 4. Para capturar o título da

notícia, basta escrever e executar o seguinte comando:

String titulo = doc.select("article header h1").text(); Figura 07: comando Jsoup para recortar determinada informação navegando hierarquicamente.

Dessa maneira criamos um objeto titulo do tipo string que receberá o texto contido na

hierarquia de tags <article>, <header> e <h1>, ou seja, o título da notícia. Desta maneira, para todas

as capturas, já sabemos onde e como buscar o título da notícia. Basta agora, repetir o processo para

os próximos endereços. No entanto, essa não é a única forma de chegar a esta informação. Jsoup

fornece diversas maneiras de chegarmos a determinado conteúdo.

Para capturar a data (05/06/2013) e a hora (13:43) neste HTML, vamos usar uma abordagem

um pouco diferente. Ao invés de navegar pela tag mais externa da hierarquia (<article>), iremos

diretamente ao elemento mais próximo do texto que pretendemos selecionar (<time>),

referenciando-os através da propriedade “class”.

17

String dataHora = dados.getElementByTag("time").attr("datetime"); Figura 08: comando Jsoup para recortar determinada informação através de um atributo.

Este comando solicita ao Jsoup que recorte dentro da tag <time> o valor contido no atributo

datetime, neste caso 2013-06-05T13:43. Precisamos efetuar o tratamento destes dados para

podermos gravar no banco de dados corretamente. Uma maneira de resolver isto é usar métodos

nativos da linguagem java que permite a manipulação de valores do tipo string, como é o caso.

Usamos o comando split que recorta pedaços delimitados de strings. Assim, podemos gravar

separadamente a data e a hora no banco de dados.

Vamos analisar outra situação recorrente no processo de captura. Quando encontramos

trechos HTML que repetem a mesma tag com os mesmos atributos, devemos fazer um tratamento

um pouco diferenciado para efetuar a captura dos dados. Da mesma notícia que usamos como

exemplo[22], vamos recortar apenas o texto publicado. Vamos observar um trecho modificado do

código HTML9:

1 <div class="texto">

2 <div class="conteudo-embed">...</div>

3 <p>

4 A Justiça Federal em Mato Grosso do ... evitar novos conflitos".

5 </p>

6 <p>

7 O reforço policial foi solicitado ... ordem fosse mantida.

8 </p>

9 <div class="modfoto right modulos medio">...</div>

10 <p>

11 "Eu vim com a missão muito clara ... índios ou dos policiais.

12 </p>

13 <p>

14 Cardozo viajou a Mato Grosso do Sul ... ocupavam a propriedade.

15 </p>

16 ...

17 </div>

Figura 09: trecho de código HTML modificado para usarmos como exemplo.

9 Para ver o conteúdo integral do código HTML desta notícia, acesse o endereço da mesma usando um navegador a

sua escolha. Depois que a notícia carregar por completo, clique com o botão direito do mouse sobre ela e escolha a

opção “Código Fonte”.

18

Notamos no código acima, que todo texto da notícia está dentro de tags do tipo <p>, que

representam parágrafos. Informamos ao Jsoup que queremos recortar o conteúdo interno à tag

<div> cuja classe identificadora é “texto” e tem como elementos tags do tipo <p>, ou seja, os dados

das linhas de 3 a 5, 6 a 8, 10 a 12, 13 a 15. Como o retorno será mais de uma informação, o retorno

precisa ser armazenado em um array de strings, pré-definida na API do Jsoup.

1 Elements elements = doc.getElementByClass("texto");

2

3 for(Element element : elements) {

4 Elements p = element.getElementByTag("p").text();

5 }

Figura 10: comandos Jsoup para capturar texto da notícia.

O comando da linha 1 da figura 10 separa todo conteúdo existente dentro do elemento cuja

classe de identificação seja “texto” e o armazena em uma lista. Isso corresponde a <div> da linha

01 na figura 09, que contém todo o texto da notícia entre outros dados que não nos interessam,

como os constantes nas linhas 2 e 9. Percorremos esta lista usando o comando de repetição for

presente na linha 3. Na linha 4, selecionamos o texto contido nos elementos <p> dentro da lista, o

que implica na exclusão automática do que não nos interessa. Em um comando, resolvemos dois

pontos críticos. No final destes comandos, temos o texto da notícia armazenado no objeto p criado

na linha 4.

Os outros elementos existentes nas páginas web e que por ventura nos interesse, fatalmente

estarão dentro de elementos HTML que podem ser identificados por seus nomes, classes e

atributos. Assim, é possível resgatar seus valores usando as funcionalidades do Jsoup, que são

muito vastas.

5 Conclusão

É cada vez mais comum a ligação entre as pessoas e o meio virtual, sejam elas crianças,

adultos ou idosos. Esta cada vez mais natural a presença de smatphones, ipads e outros dispositivos

que nos aproximam da tecnologia. A popularização e expansão da internet bem como sua facilidade

de acesso acabam aproximando as pessoas dos meios virtuais. Até mesmo as redes sociais acabam

trazendo a tecnologia para perto das pessoas. Diante disso, os grandes meios de comunicação se

viram obrigados a mudar seu foco de ação para esta nova realidade, juntando suas publicações de

rádio, tv e impressos a publicação de conteúdo online.

19

Esse avanço trouxe uma agilidade na propagação das informações permitindo que as

empresas passem a ter acesso ao conteúdo que lhe interessa de maneira rápida e seletiva. E é de

interesse empresarial poder saber o que falam sobre sua marca ou qual rumo o seu negocio, ou

aquilo que o influencia, esta tomando.

Este trabalho tem por objetivo apresentar um processo integral de captura de notícias, desde

o inicio do processo até a entrega dos dados para o cliente final. Mostramos uma biblioteca java que

tem um papel preponderante para termos agilidade de captura e entrega das noticias. Além da

eficiência, sua facilidade de uso, qualidade na documentação e alto desempenho computacional, seu

grande trunfo for ter sido desenvolvida para interpretar e possibilitar o recorte de textos em locais

específicos de arquivos HTML imensos, como é comum na web. Talvez a única dificuldade que

podemos encontrar e nos deparar com sites mal desenvolvidos, que, por experiência, está cada vez

mais difícil de acontecer, pois os web-designers estão seguindo os padrões recomendados para

desenvolvimento web pelo W3C10

, órgão responsável por criar padrões de desenvolvimento web.

Acredito que, por ser uma técnica de baixo custo e alta performance, o uso deste processo se

torna um alternativa bastante viável para criar robôs de captura de conteúdos na web. Os trabalhos

futuros podem até pensar numa expansão da fronteira de captura de dados de web sites para redes

sociais, como o Facebook e Twitter, fazendo um apanhado geral em todas as atmosferas web, como

sites, blogs e redes sociais.

6 Bibliografia

[1] MOUTINHO, SOFIA. Quanta informação há no mundo? [Online] Disponível em

<http://cienciahoje.uol.com.br/noticias/2011/02/quanta-informacao-ha-no-mundo>. Acessado em 30 Jul.

2013.

[2] REDAÇÃO OLHAR DIGITAL. Internet guarda 10 mil terabytes de dados. [Online] Disponível em

<http://olhardigital.uol.com.br/noticia/internet-guarda-10-mil-terabytes-de-dados/30132>. Acessado em 30

Jul. 2013.

[3] Páginas dos desenvolvedores. [Online] Disponivel em <http://create.spinvox.com>,

<http://www.nch.com.au>. Acessado em 30 Jul. 2013.

[4] LOPES, DIRCEU FERNANDES; SOBRINHO, JOSE COELHO; PROENÇA, JOSE LUIZ. Edição em

10

World Wide Web Consortium - http://www.w3.org/

20

Jornalismo Eletrônico. Rio de Janeiro: Edicon. 1ª edição – 2000.

[5] ADMINISTRADORES – O PORTAL DA ADMINISTRAÇÃO. Clipping, o desafio das assessorias de

imprensa. [Online] Disponível em <http://www.administradores.com.br/noticias/cotidiano/clipping-o-

desafio-das-assessorias-de-imprensa/34054/>. Acessado em 25 Out. 2013.

[6] ABEMO – ASSOCIAÇÃO BRASILEIRA DE EMPRESAS DE MONITORAMENTO DE

INFORMAÇÃO. Atividade útil e legítima. [Online] Disponível em

<http://www.abemo.org/index.php/o_que_e_clipping>. Acessado em 10 Fev. 2013.

[7] PRESIDENCIA DA REPÚBLICA. Lei Nº 9.610. [Online] Disponível em

<http://www.planalto.gov.br/ccivil_03/leis/l9610.htm>. Acessado em 02 Ago. 2013.

[8] DEITEL PAUL; DEITEL HARVEY; NIETO, TEM R. Internet e World Wide Web como programar.

Porto Alegre: Bookman. 2ª edição – 2003.

[9] Web-Crawler. [Online] Disponível em <http://pt.wikipedia.org/wiki/Web_crawler>. Acessado em 02

Ago. 2013.

[10] Java Plataform Standart. Ed. 7. [Online]. Disponível em <http://docs.oracle.com/javase/7/docs/api/>.

Acessado em 12/08/2013.

[11] DEITEL PAUL; DEITEL HARVEY. Java como programar. São Paulo: Pearson Prentice Hall. 6ª

edição – 2005.

[12] SITE OFICIAL PROJETO GNU WGET. [Online] Disponível em

<http://www.gnu.org/software/wget/>. Acessado em 14/08/2013.

[13] GOOGLEBOT: FERRAMENTAS DO GOOGLE PARA WEBMASTERS. [Online] Disponível em

<https://support.google.com/webmasters/answer/182072?hl=pt-BR>. Acessado em 14/082013.

[14] SITE OFICIAL JSOUP. [Online] Disponível em <http://jsoup.org/>. Acessado em 14/09/2013.

[15] LICENÇA JSOUP. [Online] Disponível em <http://jsoup.org/license>. Acessado em 14/09/2013.

[16] CÓDIGO-FONTE JSOUP. [Online] Disponível em <https://github.com/jhy/jsoup/>. Acessado em

14/09/2013.

21

[17] OBSERVATÓRIO DA WEB. [Online] Disponível em <http://observatorio.inweb.org.br>. Acessado

em 22/10/2013.

[18] PAPPA, GISELE LOBO. Observatório da Web: Uma Plataforma para Monitoramento de Eventos

em Tempo Real. [Online] Disponível em

<http://www.dainf.ct.utfpr.edu.br/~kaestner/Mineracao/apresentacaoGiselePappa12-10-2013.pdf>. Acessado

em 13 Nov. 2013.

[19] PROJETO EI! [Online] Disponível em < http://www-03.ibm.com/marketing/br/smarterplanet/sports/>.

Acessado em 01 Dez. 2013.

[20] IBM TRANSFORMA TORCEDORES EM TREINADORES AUXILIARES DURANTE A

COPA DAS CONFEDERAÇÕES. [Online] Disponível em <http://www-

03.ibm.com/press/br/pt/pressrelease/41300.wss>. Acessado em 01 Dez. 2013.

[21] EI! ANÁLISE DA FINAL DA COPA DAS CONFEDERAÇÕES ENTRE BRASIL E ESPANHA.

[Online] Disponível em

<http://www-03.ibm.com/marketing/br/smarterplanet/sports/media/pdf/30062013_brasil_espanha.pdf>.

Acessado em 03 Dez. 2013.

[22] NOTÍCIA USADA NOS EXEMPLOS. [Online] Disponível em

<http://noticias.uol.com.br/politica/ultimas-noticias/2013/06/05/termina-prazo-e-indios-permanecem-

em-fazenda-em-mato-grosso-do-sul.htm>. Acessado em 04 Dez. 2013.

[23] API. [Online] Disponível em <http://pt.wikipedia.org/wiki/Web_crawler>. Acessado em 28 Nov. 2013.

[24] SETTING THE JAVA BUILD PATH. [ONLINE]. Disponível em

<http://www.tutorialspoint.com/eclipse/eclipse_java_build_path.htm>. Acessado em 24 Nov. 2013.