A tabela mostra 10 colunas. Você exporta. O CSV tem 10 colunas.
Mas a página tem 15 colunas de dados. Para onde foram as outras 5?
Tabelas HTML frequentemente contêm mais dados do que o que está visível. Colunas ocultas, atributos data, linhas colapsadas — tudo invisível para métodos básicos de extração.
Veja como encontrar e extrair os dados que você não vê.
Tipos de Dados Ocultos
1. Colunas Ocultas por CSS
O caso mais simples: as colunas existem no DOM, mas estão ocultas com CSS.
<th style="display: none;">ID Interno</th>
<td style="display: none;">12345</td>
Ou via classes:
.hidden-column { display: none; }
Por que os sites fazem isso: Responsividade mobile (ocultar colunas em telas pequenas), dados internos para JavaScript, exibição progressiva.
Como detectar: Abra o DevTools, inspecione a tabela, procure por células com display: none ou visibility: hidden.
2. Atributos Data
O HTML5 permite atributos personalizados data-* em qualquer elemento. Tabelas usam esses atributos para armazenar metadados que o JavaScript acessa, mas o usuário não vê.
<tr data-id="12345" data-category="eletronicos" data-stock="47">
<td>Laptop</td>
<td>R$ 4.999</td>
</tr>
A tabela visível mostra "Laptop" e "R$ 4.999". Mas a linha carrega três dados extras.
Atributos data comuns:
-
data-id— identificador interno -
data-sort-value— valor numérico para ordenação (quando a exibição mostra "Jan 2024" mas a ordenação precisa de 202401) -
data-raw— valor sem formatação (quando a exibição mostra "R$ 1,2M" mas o dado é 1200000) -
data-href— URL do link
3. Atributos Title e Tooltip
O atributo title fornece texto ao passar o mouse que frequentemente contém informações adicionais.
<td title="Atualizado: 2024-01-15 14:32:00 UTC">15 Jan</td>
A célula exibe "15 Jan". O timestamp completo está no tooltip.
4. Linhas Colapsadas/Expansíveis
Tabelas com funcionalidade drill-down ocultam linhas de detalhe até serem clicadas.
<tr class="parent-row">
<td>Categoria A</td>
<td>R$ 250.000</td>
</tr>
<tr class="child-row" style="display: none;">
<td>— Subcategoria A1</td>
<td>R$ 150.000</td>
</tr>
<tr class="child-row" style="display: none;">
<td>— Subcategoria A2</td>
<td>R$ 100.000</td>
</tr>
Os dados existem. Apenas não estão expandidos.
5. Conteúdo com Lazy Load
Algumas tabelas mostram um subconjunto e carregam mais via JavaScript quando você rola ou clica em "Carregar Mais".
<table id="results">
<!-- Primeiras 20 linhas renderizadas -->
</table>
<button onclick="loadMore()">Mostrar Mais Resultados</button>
Os dados restantes não estão no DOM até você acionar o carregamento.
Extraindo Dados Ocultos
Extraindo Colunas Ocultas por CSS
Com JavaScript (no console do navegador):
// Remove display:none de todas as células
document.querySelectorAll('td, th').forEach(el => {
el.style.display = '';
});
Agora exporte normalmente — as colunas estão visíveis.
Com Python + BeautifulSoup:
O BeautifulSoup ignora CSS. Ele extrai todos os elementos independentemente da visibilidade.
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
table = soup.find('table')
for row in table.find_all('tr'):
cells = [td.get_text(strip=True) for td in row.find_all(['td', 'th'])]
print(cells) # Inclui colunas ocultas
Extraindo Atributos Data
Abordagem com JavaScript:
const rows = document.querySelectorAll('table tr');
const data = [];
rows.forEach(row => {
const rowData = {
// Texto visível
cells: Array.from(row.querySelectorAll('td')).map(td => td.textContent),
// Atributos data
id: row.dataset.id,
category: row.dataset.category,
stock: row.dataset.stock
};
data.push(rowData);
});
console.log(JSON.stringify(data, null, 2));
Abordagem com Python:
for row in table.find_all('tr'):
# Obter atributos data
attrs = {k: v for k, v in row.attrs.items() if k.startswith('data-')}
# Obter texto das células
cells = [td.get_text(strip=True) for td in row.find_all('td')]
print(f"Data: {attrs}, Células: {cells}")
Extraindo Atributos Title
const cells = document.querySelectorAll('table td');
cells.forEach(cell => {
if (cell.title) {
console.log(`Exibido: ${cell.textContent}, Completo: ${cell.title}`);
}
});
Expandindo Linhas Colapsadas
Opção 1: Clicar em todos os botões de expansão
// Encontrar e clicar em todos os botões de expansão
document.querySelectorAll('.expand-btn, .toggle-row').forEach(btn => {
btn.click();
});
// Aguardar atualização do DOM, depois exportar
setTimeout(() => {
// Lógica de exportação aqui
}, 1000);
Opção 2: Remover classe hidden
document.querySelectorAll('.child-row, .detail-row').forEach(row => {
row.style.display = '';
row.classList.remove('hidden', 'collapsed');
});
Acionando Lazy Load
Isso é mais complicado — você precisa simular a ação que aciona o carregamento.
// Rolar até o final para acionar scroll infinito
window.scrollTo(0, document.body.scrollHeight);
// Ou clicar em "Carregar Mais" repetidamente
const loadMore = document.querySelector('.load-more-btn');
while (loadMore && !loadMore.disabled) {
loadMore.click();
await new Promise(r => setTimeout(r, 500)); // Aguardar carregamento
}
Exemplo Real: Valores de Ordenação
Tabelas de estatísticas esportivas frequentemente exibem números formatados, mas ordenam por valores brutos.
<td data-sort="1234567">1,23M</td>
<td data-sort="20240115">15 Jan, 2024</td>
<td data-sort="0.347">34,7%</td>
Se você extrair apenas o texto visível, obtém strings formatadas que não ordenam nem calculam corretamente.
Extração com ambos os valores:
const cells = document.querySelectorAll('table td');
const data = Array.from(cells).map(cell => ({
display: cell.textContent.trim(),
sortValue: cell.dataset.sort || cell.textContent.trim()
}));
Quando Extensões de Navegador Ajudam
Boas ferramentas de exportação de tabelas lidam com parte disso automaticamente:
- Colunas ocultas por CSS podem ser incluídas via opção
- Atributos data podem ser extraídos como colunas adicionais
- Normalização de números pode converter "R$ 1,23M" em 1230000
O HTML Table Exporter extrai conteúdo visível com tratamento adequado de células mescladas e formatação. Para necessidades de extração mais complexas sem código, veja nosso guia sobre as melhores extensões Chrome para scraping de tabelas HTML.
Para atributos data e conteúdo profundamente oculto, você pode precisar das abordagens com JavaScript acima.
O Fluxo de Inspeção
Antes de extrair qualquer tabela:
- Abra o DevTools (F12)
- Inspecione o elemento da tabela
-
Verifique se há:
-
display: noneem colunas - Atributos
data-*em linhas/células - Atributos
titlecom informações extras - Linhas filhas ocultas
- Botões "Carregar mais"
-
- Decida: Os dados visíveis são suficientes, ou você precisa dos dados ocultos?
Na maioria das vezes, os dados visíveis são suficientes. Mas quando não são, saber como encontrar e extrair dados ocultos faz toda a diferença.
Resumo
Tabelas HTML podem conter múltiplas camadas de dados:
| Camada | Como Acessar |
|---|---|
| Texto visível | Exportação padrão |
| Colunas ocultas por CSS | Remover display:none ou usar BeautifulSoup |
| Atributos data | JavaScript dataset ou Python attrs |
| Title/tooltips | Extrair atributo title |
| Linhas colapsadas | Expandir ou remover classe hidden |
| Lazy-loaded | Acionar carregamento primeiro |
Os dados geralmente estão lá. Você só precisa saber onde procurar.
Precisa exportar os dados que você já vê? Saiba mais em gauchogrid.com/pt-br/html-table-exporter ou experimente o HTML Table Exporter gratuitamente na Chrome Web Store.
Top comments (0)