Introdução
Hoje, os dados são o combustível de muitas aplicações. Mas nem sempre esses dados estão disponíveis em APIs. Muitas vezes, estão em sites públicos, visíveis apenas no navegador. Nesses casos, o Web Scraping é a solução.
Neste artigo você vai aprender:
O que é Web Scraping
Exemplos práticos com Python e JavaScript
Quando e onde usar essa técnica
Ferramentas recomendadas
Onde hospedar seu scraper gratuitamente
O que é Web Scraping?
Web Scraping é o processo de automatizar a coleta de dados de sites. Ele simula a navegação de um usuário para acessar e extrair informações diretamente do HTML das páginas permitindo buscar informações em campos específicos na página e manter os dados sempre atualizados.
Isso é útil para:
Coletar preços de produtos
Capturar notícias e artigos
Monitorar redes sociais ou fóruns
Alimentar bases de dados e dashboards
Exemplo de Web Scraping com Python (BeautifulSoup)
Vamos capturar os títulos de notícias do site G1.
Instalação:
pip install requests beautifulsoup4
Código em Python:
import requests
from bs4 import BeautifulSoup
url = ‘https://g1.globo.com/’
response = requests.get(url)
soup = BeautifulSoup(response.text, ‘html.parser’)
titulos = soup.find_all(‘a’, class_=’feed-post-link’)
for titulo in titulos:
print(titulo.get_text())
Onde hospedar esse script gratuitamente:
Replit — permite rodar scripts Python na nuvem.
Render — suporta agendamento de tarefas (cron jobs).
GitHub + Actions — você pode agendar execuções automáticas via GitHub Actions.
PythonAnywhere — plano gratuito ideal para scripts simples.
Exemplo de Web Scraping com JavaScript (Node.js + Axios + Cheerio)
Se você prefere JavaScript, veja como fazer a mesma coisa com Node.js.
Instalação:
npm install axios cheerio
Código em JavaScript:
const axios = require('axios');
const cheerio = require('cheerio');
const url = ‘https://g1.globo.com/’;
axios.get(url)
.then(response => {
const $ = cheerio.load(response.data);
const titulos = [];
$(‘a.feed-post-link’).each((i, element) => {
titulos.push($(element).text());
});
console.log(‘Títulos encontrados:’);
console.log(titulos);
})
.catch(error => console.error(‘Erro:’, error));
Onde hospedar esse scraper com JavaScript:
Glitch — ideal para projetos pequenos com Node.js.
Replit — também suporta projetos Node.js.
Vercel — funciona bem com funções serverless.
Railway — ótima opção para scripts Node.js com agendamento.
Atenção: Legalidade e Ética
Antes de fazer scraping em qualquer site, considere:
- Consulte o arquivo
/robots.txt
do site para saber se o scraping é permitido - Leia os Termos de Uso
- Evite scraping de dados privados, pessoais ou protegidos
- Use delays e evite sobrecarregar servidores
Sempre que possível, use APIs oficiais. Scraping deve ser a última alternativa.
Ferramentas populares para Web Scraping
Python
requests
+BeautifulSoup
: simples e diretoSelenium
: ótimo para páginas com JavaScript dinâmicoScrapy
: framework robusto para scraping em larga escalaPlaywright
: alternativa moderna ao Selenium
JavaScript
axios
+cheerio
: equivalente a requests + BeautifulSoupPuppeteer
: automação com o ChromePlaywright
: também funciona em Node.js
Salvando os dados
Python — salvar em CSV:
import csv
with open(‘noticias.csv’, ‘w’, newline=”, encoding=’utf-8′) as arquivo:
writer = csv.writer(arquivo)
writer.writerow([‘Título’])
for titulo in titulos:
writer.writerow([titulo.get_text()])
JavaScript — salvar em arquivo JSON:
const fs = require('fs');
fs.writeFileSync('noticias.json', JSON.stringify(titulos, null, 2), 'utf-8');
Agendamento automático
Quer rodar seu scraper diariamente?
GitHub Actions: você pode agendar execuções com cron jobs.
Render ou Railway: suportam execução agendada.
PythonAnywhere: permite criar tarefas agendadas no plano gratuito.
Conclusão
O Web Scraping é uma ferramenta essencial para desenvolvedores e cientistas de dados. Ele pode transformar sites em fontes estruturadas de dados, automatizando processos manuais e gerando insights valiosos.
Mas lembre-se: use com responsabilidade. Sempre verifique a legalidade e o impacto do seu scraper nos sites que pretende acessar.