Extraindo Dados da Web: Uma Introdução ao Web Scraping
A técnica de web scraping possibilita a coleta eficiente de grandes volumes de dados da internet de maneira extremamente rápida. Essa abordagem se mostra particularmente útil quando os sites não disponibilizam seus dados de forma estruturada por meio de Interfaces de Programação de Aplicativos (APIs).
Para ilustrar, imagine que você está desenvolvendo um aplicativo destinado à comparação de preços de produtos em diversas lojas virtuais. Como você realizaria essa tarefa? Uma opção seria verificar manualmente os preços dos itens em cada site e registrar as informações. No entanto, essa não é uma solução eficiente, considerando a vasta quantidade de produtos disponíveis nas plataformas de comércio eletrônico, o que demandaria um tempo excessivo para coletar os dados relevantes.
A forma mais eficaz de realizar essa tarefa é utilizando o web scraping. Esta técnica consiste no processo automatizado de extração de dados de páginas e sites da web por meio do uso de softwares específicos.
Scripts de software, conhecidos como web scrapers, são empregados para acessar sites e obter seus dados. As informações recuperadas, frequentemente em formato não estruturado, podem ser posteriormente analisadas e armazenadas de forma organizada e relevante para os usuários.
O web scraping se revela extremamente valioso na extração de dados, pois permite acesso a uma vasta gama de informações e possibilita a automação de processos. Isso significa que você pode programar seu script de web scraping para ser executado em horários específicos ou em resposta a determinados eventos. Além disso, o web scraping oferece atualizações em tempo real e facilita a realização de pesquisas de mercado.
Diversas empresas dependem do web scraping para extrair dados para análise. Organizações especializadas em recursos humanos, e-commerce, finanças, imobiliária, turismo, mídias sociais e pesquisa utilizam o web scraping para coletar dados relevantes de sites.
O próprio Google emprega o web scraping para indexar sites na internet, permitindo que forneça resultados de pesquisa relevantes aos seus usuários.
Contudo, é crucial ter cautela ao realizar web scraping. Embora a extração de dados publicamente acessíveis não seja ilegal, alguns sites não permitem essa prática. Essa restrição pode ser devido à proteção de informações confidenciais dos usuários, a termos de serviço que proíbem explicitamente o web scraping ou à proteção de propriedade intelectual.
Adicionalmente, alguns sites não permitem web scraping devido à possibilidade de sobrecarregar seus servidores e aumentar os custos de largura de banda, especialmente quando a extração é realizada em grande escala.
Para verificar se um site permite web scraping, adicione `robots.txt` ao seu URL. Este arquivo indica aos bots quais partes do site podem ser acessadas. Por exemplo, para verificar se o Google permite a raspagem, acesse `google.com/robots.txt`.
O termo `User-agent: *` refere-se a todos os bots ou scripts de software e rastreadores. A instrução `Disallow` informa aos bots que eles não podem acessar nenhuma URL em um diretório, por exemplo, `/search`. `Allow` indica diretórios de onde eles podem acessar URLs.
Um exemplo de site que não permite o web scraping é o LinkedIn. Para verificar se você pode raspar o LinkedIn, acesse `linkedin.com/robots.txt`.
Como você pode observar, não é permitido acessar o LinkedIn sem autorização. Sempre verifique se um site permite web scraping para evitar problemas legais.
Por que Java é uma Linguagem Adequada para Web Scraping?
Embora seja possível criar um web scraper em diversas linguagens de programação, Java se destaca como uma opção particularmente interessante por vários motivos. Primeiramente, Java possui um ecossistema rico e uma grande comunidade de desenvolvedores, oferecendo diversas bibliotecas de web scraping, como JSoup, WebMagic e HTMLUnit, que simplificam a escrita de web scrapers.
Java também disponibiliza bibliotecas de análise HTML para simplificar a extração de dados de documentos HTML e bibliotecas de rede, como `HttpURLConnection`, para fazer requisições a diferentes URLs de sites.
O sólido suporte de Java para concorrência e multithreading também é vantajoso no web scraping, permitindo o processamento paralelo e o gerenciamento de tarefas de web scraping com múltiplas requisições, possibilitando a extração de várias páginas simultaneamente. A escalabilidade é um ponto forte de Java, o que significa que você pode realizar web scraping em grande escala com um scraper escrito nessa linguagem.
O suporte multiplataforma de Java também é muito útil, pois permite que você escreva um web scraper e o execute em qualquer sistema que possua uma Java Virtual Machine compatível. Dessa forma, você pode desenvolver um web scraper em um sistema operacional ou dispositivo e executá-lo em outro sem a necessidade de modificações.
Java também pode ser usado com navegadores headless, como Headless Chrome, HTML Unit, Headless Firefox e PhantomJs, entre outros. Um navegador headless é um navegador sem interface gráfica de usuário. Esses navegadores podem simular interações do usuário e são extremamente úteis ao raspar sites que exigem esse tipo de interação.
Finalmente, Java é uma linguagem popular e amplamente utilizada, com suporte e fácil integração com diversas ferramentas, como bancos de dados e estruturas de processamento de dados. Isso é benéfico pois garante que, ao coletar dados, todas as ferramentas necessárias para extrair, processar e armazená-los provavelmente oferecerão suporte para Java.
Vamos explorar como podemos utilizar Java para web scraping.
Java para Web Scraping: Requisitos Prévios
Para utilizar Java no web scraping, é necessário atender aos seguintes requisitos:
1. Java | Você deve ter o Java instalado, preferencialmente a versão mais recente com suporte de longo prazo. Caso não tenha o Java instalado, consulte o guia de instalação para saber como instalá-lo em sua máquina. |
2. Ambiente de Desenvolvimento Integrado (IDE) | Você deve ter um IDE instalado em sua máquina. Para este tutorial, utilizaremos o IntelliJ IDEA, mas você pode usar qualquer IDE de sua preferência. |
3. Maven | Será utilizado para o gerenciamento de dependências e para instalar uma biblioteca de web scraping. |
Caso não tenha o Maven instalado, você pode instalá-lo abrindo o terminal e executando:
sudo apt install maven
Essa ação instalará o Maven a partir do repositório oficial. Para confirmar que o Maven foi instalado com sucesso, execute:
mvn -version
Se a instalação for bem-sucedida, você deverá obter uma saída semelhante a esta:
Configurando o Ambiente
Para configurar seu ambiente, siga os passos abaixo:
1. | Abra o IntelliJ IDEA. Na barra de menu à esquerda, clique em `Projetos` e selecione `Novo Projeto`. |
![]() |
|
2. | Na janela `Novo Projeto` que se abre, preencha os campos conforme mostrado abaixo. Certifique-se de que a `Linguagem` esteja definida como `Java` e o `Sistema de Build` como `Maven`. Você pode dar o nome que desejar ao projeto e usar `Local` para especificar a pasta onde deseja que ele seja criado. Após preencher as informações, clique em `Criar`. |
![]() |
|
3. | Após a criação do projeto, você deverá encontrar um arquivo `pom.xml` em seu projeto, como mostrado abaixo. |
![]() |
O arquivo `pom.xml` é criado pelo Maven e contém informações sobre o projeto e detalhes de configuração utilizados pelo Maven para construir o projeto. É nesse arquivo que também indicamos que utilizaremos bibliotecas externas.
Ao construir um web scraper, utilizaremos a biblioteca `jsoup`. Portanto, precisamos adicioná-la como uma dependência no arquivo `pom.xml` para que o Maven possa disponibilizá-la ao nosso projeto.
4. | Adicione a dependência `jsoup` ao arquivo `pom.xml` copiando o código abaixo e inserindo-o em seu arquivo `pom.xml`. |
<dependencies> <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.16.1</version> </dependency> </dependencies>
O resultado deverá ser similar a este:
Caso encontre um erro indicando que a dependência não pode ser encontrada, clique no ícone indicado para que o Maven carregue as alterações feitas, importe a dependência e remova o erro.
Com isso, seu ambiente estará totalmente configurado.
Web Scraping com Java
Para fins de web scraping, vamos extrair dados do site Scrape This Site, que oferece um ambiente de testes onde desenvolvedores podem praticar web scraping sem enfrentar problemas legais.
Para raspar um site utilizando Java:
1. | Na barra de menu à esquerda do IntelliJ, abra o diretório `src` e, em seguida, o diretório `main`, que está dentro do diretório `src`. O diretório `main` contém um diretório chamado `java`; clique com o botão direito sobre ele e selecione `Novo`, depois `Classe Java`. |
![]() |
|
Dê o nome desejado à classe, como `WebScraper`, e pressione `Enter` para criar uma nova classe Java. | |
![]() |
Abra o arquivo recém-criado que contém as classes Java que você acabou de criar.
2. | O web scraping envolve a obtenção de dados de sites. Portanto, precisamos especificar o URL do qual desejamos extrair os dados. Após especificarmos o URL, precisamos nos conectar a ele e fazer uma requisição `GET` para obter o conteúdo HTML da página. |
O código que realiza essa ação é apresentado abaixo:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.IOException; public class WebScraper { public static void main(String[] args) { String url = "https://www.scrapethissite.com/pages/simple/"; try { Document doc = Jsoup.connect(url).get(); System.out.println(doc); } catch (IOException e) { System.out.println("An IOException occurred. Please try again."); } } }
Saída:
Como você pode notar, o HTML da página é retornado, e é isso que estamos imprimindo. Ao realizar a extração, o URL especificado pode apresentar um erro, e o recurso que você está tentando extrair pode não existir. É por isso que é crucial agrupar nosso código em um bloco `try-catch`.
A linha:
Document doc = Jsoup.connect(url).get();
É utilizada para se conectar ao URL do qual você deseja extrair dados. O método `get()` é utilizado para realizar uma requisição `GET` e obter o HTML da página. O resultado retornado é então armazenado em um objeto JSOUP `Document`, denominado `doc`. Armazenar o resultado em um documento JSOUP permite utilizar a API JSOUP para manipular o HTML retornado.
3. | Acesse Scrape This Site e inspecione a página. No HTML, você deverá observar a estrutura mostrada abaixo: |
![]() |
Observe que todos os países da página estão armazenados em uma estrutura similar. Existe uma `div` com uma classe denominada `country` contendo um elemento `h3` com uma classe `country-name` que armazena o nome de cada país na página.
Dentro da `div` principal, existe outra `div` com a classe `country-info` que armazena informações como capital, população e área do país. Podemos utilizar esses nomes de classes para selecionar os elementos HTML e extrair suas informações.
4. | Extraia o conteúdo específico do HTML da página usando as seguintes linhas de código: |
Elements countries = doc.select(".country"); for (Element country : countries) { String countryName = country.select(".country-name").text(); String capitalCity = country.select(".country-capital").text(); String population = country.select(".country-population").text(); System.out.println(countryName + " - " + capitalCity + " Population - " + population); }
Utilizamos o método `select()` para selecionar elementos do HTML da página que correspondem a um seletor CSS específico que passamos. Em nosso caso, passamos os nomes das classes. Ao inspecionar a página, verificamos que todas as informações do país na página estão armazenadas em uma `div` com uma classe `country`.
Cada país possui sua própria `div` com uma classe `country`, e essa `div` contém informações como nome, capital e população do país.
Portanto, primeiramente, selecionamos todos os países da página utilizando a classe `.country`. Em seguida, armazenamos esses dados em uma variável denominada `countries` do tipo `Elements`, que funciona como uma lista. Depois, utilizamos um loop `for` para percorrer os países, extrair seu nome, capital e população e imprimir as informações encontradas.
O código completo é apresentado abaixo:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import org.jsoup.nodes.Element; import java.io.IOException; public class WebScraper { public static void main(String[] args) { String url = "https://www.scrapethissite.com/pages/simple/"; try { Document doc = Jsoup.connect(url).get(); Elements countries = doc.select(".country"); for (Element country : countries) { String countryName = country.select(".country-name").text(); String capitalCity = country.select(".country-capital").text(); String population = country.select(".country-population").text(); System.out.println(countryName + " - " + capitalCity + " - Population - " + population); } } catch (IOException e) { System.out.println("An IOException occurred. Please try again."); } } }
Saída:
Com as informações extraídas da página, podemos realizar diversas tarefas, como imprimi-las, como acabamos de fazer, ou armazená-las em um arquivo, caso necessitemos de processamento de dados adicional.
Conclusão
O web scraping é uma excelente ferramenta para extrair dados não estruturados de sites, armazená-los de forma organizada e processá-los para obter informações relevantes. No entanto, é fundamental ter cautela ao utilizar o web scraping, pois alguns sites não permitem essa prática.
Para praticar o web scraping com segurança, utilize sites que oferecem ambientes de testes. Caso contrário, sempre verifique o arquivo `robots.txt` de cada site que deseja acessar para saber se ele permite a extração de dados.
Ao desenvolver web scrapers, Java se destaca como uma excelente opção, pois oferece bibliotecas que tornam o processo mais fácil e eficiente. Como desenvolvedor Java, a criação de um web scraper irá ajudá-lo a aprimorar suas habilidades de programação. Portanto, desenvolva seu próprio web scraper ou modifique o apresentado neste artigo para extrair diferentes tipos de informações. Boa codificação!
Você também pode explorar algumas soluções populares de web scraping baseadas em nuvem.