Textos Coment.

Trajano Leme Filho » Tecnologia da Informação » Web Scraping – raspagem de dados na web

Web Scraping – raspagem de dados na web

No mundo corporativo, o que todas as empresa desejam, é serem bem sucedidas na competição com seus concorrentes. Essa competição pode ser dar em um âmbito de sobrevivência (quando a empresa está entre a vida e a morte, e muitas vezes o preço de seus produtos e serviços é o fator fundamental para sua permanência no mercado), ou de inovação (quando a empresa investe em pesquisa e desenvolvimento para criar produtos e serviços que inovam e ultrapassam a expectativa de seus clientes).

Seja na guerra de preços, seja na inovação, a “informação” (quando baixar ou elevar um preço, monitorar o nível de satisfação dos clientes etc.) é o componente básico que pode contribuir para a tomada de decisão, e por sua vez, para a criação de conhecimento.

Assim, saber para que caminho o concorrente está seguindo, pode ser crucial na elaboração de uma estratégia de defesa ou ataque. E mais importante do que ter a estratégia, é saber o momento certo de executá-la.

Neste artigo, vou demonstrar algumas ferramentas para fazer “web scraping”, ou “raspagem de dados”, uma técnica para recuperar dados de web sites em formato HTML. E porque a Web? Simplesmente porque é o maior banco de dados do mundo, onde pode-se pesquisar por (quase) tudo que se precisa.

Podemos pensar que raspagem de dados é algum tipo de “espionagem”? Claro que não. Apesar da espionagem ser tão antiga quanto a própria civilização, não estou, em hipótese algum, propondo invasões a bancos de dados, usurpar senhas etc. Web scraping é simplesmente um meio de acessar informações públicas, que estão na Web, nos sites dos concorrentes, fornecedores, clientes e de toda a cadeia produtiva do mundo corporativo.

Para ilustrar esse artigo, vamos imaginar uma situação hipotética, onde sou dono de uma livraria e quero monitorar o comportamento de meus concorrentes quanto ao preço de um livro: Business Intelligence no Microsoft Excel, de minha autoria. Meu objetivo é acompanhar as mudanças de preços dos meus competidores e, à medida que algum deles lança uma promoção, eu tenha condições de reagir em velocidade para não perder mercado. Ou, no sentido inverso, quando eu fizer uma promoção, saber o quanto meus competidores me acompanham (com isso poderei saber o quanto sou temido – ou respeitado no mercado em que atuo).

Para se fazer o web scraping, vou utilizar ferramentas open source, fáceis de se utilizar e sem nenhum risco para o computador em que estão instaladas.

1) Vou utilizar nos exemplo o navegador Mozilla Firefox (http://br.mozdev.org/), mais rápido do que Internet Explorer. Se você não o tem, instale-o. Certamente não vai se arrepender.

2) É necessário baixar o FireBug, um complemento do Firefox (https://addons.mozilla.org/pt-br/firefox/addon/firebug/). Trata-se de um conjunto de ferramentas de desenvolvimento, que permite editar, depurar e monitorar CSS, HTML e JavaScript em qualquer página da web. Basta baixar o software e executá-lo. O Firefox se encarrega de tudo. O resultado no final, deve ser o ícone de um “inseto” no canto inferior direito da janela do Firefox.

3) A infra-estrutura básica está pronta. Agora, buscamos pelo conteúdo que se deseja monitorar: o preço do livro. Começaremos pela Livraria Cultura. Dentro do Firefox, faz-se uma busca simples pelo conteúdo.

4) Dentro da página, vamos marcar o objetivo que se deseja “raspar”: o preço. Na sequência, clique com o botão invertido do mouse sobre a seleção e um menu pop-up deve aparecer. Selecione a opção “Inspecionar Elemento”. Esta opção aparecer após a instalação do Firebug.

5) O resultado é que o navegador será dividido em dois painéis, sendo o inferior, o código fonte da página.

6) Para fechar o painél de código fonte do Firebug, basta clicar sobre o ícone
7) Clique sobre o item “cabeçalho” do texto que foi marcado anteriormente, e clique em “copiar XPath”.

XPath, ou XML Path Language, é uma linguagem de programação que permite construir expressões que recorrem e processam um documento XML de modo parecido a uma expressão regular.

Para entender o que foi “copiado” e testar, basta clicar com o botão invertido do mouse sobre qualquer parte da página Web e selecionar “Show in XPather”.

8.)   Uma nova janela é aberta, exibindo o complemento do Firefox XPather.

Clique sobre a caixa de texto XPath e pressione CTRL+V para colar o texto que foi anteriormente copiado.
Clique sobre o botão “Eval” e veja o resultado na caixa destacada em verde.

O XPath é o caminho em formato XML para se chegar ao conteúdo desejado, dentro de uma página HTML. Veja que, no exemplo, cada seção da página HTML é separada por uma barra “/”, e o XPath contém nada menos do que o caminho completo para se chegar à seção (que pode ser um div, uma tabela etc.). Veja só:

/html/body/div/div[2]/div/div/div/div/div[2]/div[2]/div[2]/div[2]/div/div/div/div/div/div/ul/li/strong

9) Agora, temos todos os elementos básicos que desejamos pesquisar:

URL: http://www.submarino.com.br/produto/1/22049688
XPath: /html/body/div/div[2]/div/div/div/div/div[2]/div[2]/div[2]/div[2]/div/div/div/div/div/div/ul/li/strong

10) A partir deste momento, precisamos utilizar um software que efetivamente faz o web scraping. Até agora, só o que fizemos foi “mapear” o terreno para o que deverá ser monitorado.

Para isso, vamos utilizar um software open source chamado Web Harvest (http://web-harvest.sourceforge.net/). Basta fazer o download através do menu lateral. Existe neste site uma boa documentação, com vários exemplos.

Não é um software para instalação. É apenas um arquivo .jar (java).

Para executá-lo, será necessário ter o java runtime environment (JRE) instalado em seu computador (http://www.java.com/pt_BR/download/). Esse sim, será necessário fazer o download e instalar. Mas em geral, na instalação do Firefox o java já é instalado automaticamente.

11) Ao executar o Web Harvest, a tela inicial apresenta alguns exemplos nativos. Eles podem ser úteis para se compreender a estrutura do software, e como fazer web scraping. Basicamente, vamos fazer uma extração bem simples e para isso iniciamos com o ícone “New Configuration File”.

12) O Web Harvest trabalha como se fosse uma “programação”. Para tanto, um pouco de lógica é suficiente, porque toda a documentação está disponível no excelente help da ferramenta. Ao iniciar um projeto, esta é sua aparência:

As tags “config” são orbigatórias, e tudo que fizermos deverá estar contido dentro delas.

13) Vamos então criar uma codifição bem simples, conforme imagem a seguir:

Explicação:

a) File: é uma tag do Web Harvest para criação/manipulação de arquivos.

O parâmetro action pode ser “write” (para criar arquivos novos e substituir, caso já exista) ou “append” (para criar caso não exista e incrementar a cada nova execução).
O parâmetro path contém o caminho onde o arquivo será gravado. A única exigência do software é que seja um caminho válido.

b) XPath expression: contém o caminho XPath coletado no Firefox, com a ajuda do Firebug.

c) html-to-xml: contém a URL em que será feita a pesquisa.

Observe que, a cada tag aberta, existe seu correspondente de fechamento, com uma barra “/”. É idêntico ao comportamento de uma página HTML.

A “programação” do Web Harvest segue os padrões de uma expressão matemática: tudo vai sendo feito de dentro para fora. Isso significa que primeiro se executa a leitura da URL principal, com a tag “html-to-xml”; depois se pesquisa o XPath dentro dessa URL e, finalmente; o resultado, se grava no arquivo de saída, com a tag “file”.

Para executar, basta clicar no ícone “play”. Ao término, uma mensagem é exibida (eu havia gravado o “programa” com o nome de captura_submarino1.xml).

O resultado aparece assim:

Segue o texto do Web Harvest para que você possa dar um “copy/paste”:

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

<config>

<file action=”write” path=”C:\temp\precos\preco_submarino.txt”>

<xpath expression=”/html/body/div/div[2]/div/div/div/div/div[2]/div[2]/div[2]/div[2]/div/div/div/div/div/div/ul/li/strong”>

<html-to-xml outputtype=”pretty”>

<http url=”http://www.submarino.com.br/produto/1/22049688″/>

</html-to-xml>

</xpath>

</file>

</config>

14) Agora, basta fazer o mesmo para outros concorrentes, e criar um “robô” ETL (extração, transformação e carga) ou serviço do Windows, para ler este arquivo texto, tratá-lo e gravar seu conteúdo em um banco de dados.

Pensando na estratégia apresentada no início do texto, quando houver variação de preço, meus sistemas podem gerar um alerta e eu vou reagir com muito mais rapidez.

Com isso, vou poder monitorar o comportamento de meus concorrentes de forma prática e automatizada.

15) Ainda, complementarmente, a ferramenta permite que seja executada em linha de comando.

java -jar webharvest_all_2.jar config=”[path + arquivo XML web harvest]“

Exemplo:

java -jar webharvest_all_2.jar config=” C:\temp\webharvest2b1\captura_submarino1.xml”

Com isso, pode-se executar através do scheduler do Windows, de forma periódica.

16) No Web Harvest é possível trabalhar com variáveis, loops, enfim, com estruturas de programação que, com um pouco de investimento de tempo, pode-se alcançar resultados profissionais.

Espero poder ter contribuído com a necessidade de captura de informações externas às empresas, com o objetivo de competir para ganhar!

Trajano Leme Filho

Postado em: Tecnologia da Informação

3 respostas para "Web Scraping – raspagem de dados na web"

  1. Natascha disse:

    Adorei Trajano!
    Funcionou direitinho!
    Só fica a dica para quem copiar e colar o código: precisa recolocar as aspas duplas se não o Web-Harvest exibe erro e não roda. Além disso, faltou fechar a tag .

  2. Guilherme disse:

    Boa Noite Trajano,

    Como poderia fazer esta extração de dados SEM utilizar o Web-Harvest? Imagina que eu quero fazer isso e mostrar em uma página HTML…

    Abraço!

    1. Trajano Leme disse:

      Guilherme, boa noite. Obrigado pelo seu comentário. Neste caso você deve utilizar recursos de programação, talvez em Java Script ou PHP. Procure em sites especializados em source codes. Certamente você encontrará algo. O Web-Harvest (e outros) são recursos bons para ganhar tempo, utilizando o que já existe.

      Abraço,
      Trajano

Deixe uma resposta

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>