De tabel toont 10 kolommen. Je exporteert hem. De CSV heeft 10 kolommen.
Maar de pagina bevat 15 kolommen aan data. Waar zijn de andere 5 gebleven?
HTML-tabellen bevatten vaak meer data dan wat zichtbaar is. Verborgen kolommen, data-attributen, ingeklapte rijen — allemaal onzichtbaar voor basale extractiemethoden.
Zo vind en extraheer je de data die je niet kunt zien.
Typen Verborgen Data
1. CSS-verborgen Kolommen
Het eenvoudigste geval: kolommen bestaan in de DOM maar zijn verborgen met CSS.
<th style="display: none;">Intern ID</th>
<td style="display: none;">12345</td>
Of via klassen:
.hidden-column { display: none; }
Waarom sites dit doen: Mobiele responsiviteit (kolommen verbergen op kleine schermen), interne data voor JavaScript, progressieve onthulling.
Hoe te detecteren: Open DevTools, inspecteer de tabel, zoek naar cellen met display: none of visibility: hidden.
2. Data-attributen
HTML5 staat aangepaste data-* attributen toe op elk element. Tabellen gebruiken deze om metadata op te slaan die JavaScript benadert maar gebruikers niet zien.
<tr data-id="12345" data-category="elektronica" data-stock="47">
<td>Laptop</td>
<td>€999</td>
</tr>
De zichtbare tabel toont "Laptop" en "€999". Maar de rij draagt drie extra datapunten.
Veelvoorkomende data-attributen:
-
data-id— interne identifier -
data-sort-value— numerieke waarde voor sortering (wanneer het display "jan 2024" toont maar de sortering 202401 nodig heeft) -
data-raw— ongeformatteerde waarde (wanneer het display "€1,2M" toont maar de data 1200000 is) -
data-href— link-URL
3. Title- en Tooltip-attributen
Het title-attribuut biedt hovertekst die vaak aanvullende informatie bevat.
<td title="Bijgewerkt: 2024-01-15 14:32:00 UTC">15 jan</td>
De cel toont "15 jan". De volledige timestamp staat in de tooltip.
4. Ingeklapte/Uitklapbare Rijen
Tabellen met drill-down functionaliteit verbergen detailrijen tot er wordt geklikt.
<tr class="parent-row">
<td>Categorie A</td>
<td>€50.000</td>
</tr>
<tr class="child-row" style="display: none;">
<td>— Subcategorie A1</td>
<td>€30.000</td>
</tr>
<tr class="child-row" style="display: none;">
<td>— Subcategorie A2</td>
<td>€20.000</td>
</tr>
De data is er. Hij is alleen niet uitgeklapt.
5. Lazy-loaded Content
Sommige tabellen tonen een subset en laden meer via JavaScript als je scrollt of op "Meer laden" klikt.
<table id="results">
<!-- Eerste 20 rijen gerenderd -->
</table>
<button onclick="loadMore()">Meer resultaten tonen</button>
De overige data staat niet in de DOM totdat je het laden activeert.
Verborgen Data Extraheren
CSS-verborgen Kolommen Extraheren
Met JavaScript (in browserconsole):
// Verwijder display:none van alle cellen
document.querySelectorAll('td, th').forEach(el => {
el.style.display = '';
});
Nu kun je normaal exporteren — de kolommen zijn zichtbaar.
Met Python + BeautifulSoup:
BeautifulSoup negeert CSS. Het extraheert alle elementen ongeacht zichtbaarheid.
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) # Inclusief verborgen kolommen
Data-attributen Extraheren
JavaScript-aanpak:
const rows = document.querySelectorAll('table tr');
const data = [];
rows.forEach(row => {
const rowData = {
// Zichtbare tekst
cells: Array.from(row.querySelectorAll('td')).map(td => td.textContent),
// Data-attributen
id: row.dataset.id,
category: row.dataset.category,
stock: row.dataset.stock
};
data.push(rowData);
});
console.log(JSON.stringify(data, null, 2));
Python-aanpak:
for row in table.find_all('tr'):
# Haal data-attributen op
attrs = {k: v for k, v in row.attrs.items() if k.startswith('data-')}
# Haal celtekst op
cells = [td.get_text(strip=True) for td in row.find_all('td')]
print(f"Data: {attrs}, Cellen: {cells}")
Title-attributen Extraheren
const cells = document.querySelectorAll('table td');
cells.forEach(cell => {
if (cell.title) {
console.log(`Weergave: ${cell.textContent}, Volledig: ${cell.title}`);
}
});
Ingeklapte Rijen Uitklappen
Optie 1: Klik alle uitklap-knoppen
// Zoek en klik alle uitklapknoppen
document.querySelectorAll('.expand-btn, .toggle-row').forEach(btn => {
btn.click();
});
// Wacht tot DOM is bijgewerkt, exporteer dan
setTimeout(() => {
// Exportlogica hier
}, 1000);
Optie 2: Verborgen klasse verwijderen
document.querySelectorAll('.child-row, .detail-row').forEach(row => {
row.style.display = '';
row.classList.remove('hidden', 'collapsed');
});
Lazy Load Activeren
Dit is lastiger — je moet de actie simuleren die het laden activeert.
// Scroll naar beneden om infinite scroll te activeren
window.scrollTo(0, document.body.scrollHeight);
// Of klik herhaaldelijk op "Meer laden"
const loadMore = document.querySelector('.load-more-btn');
while (loadMore && !loadMore.disabled) {
loadMore.click();
await new Promise(r => setTimeout(r, 500)); // Wacht op laden
}
Praktijkvoorbeeld: Sorteerwaarden
Sportstatistiektabellen tonen vaak geformatteerde getallen maar sorteren op ruwe waarden.
<td data-sort="1234567">1,23M</td>
<td data-sort="20240115">15 jan 2024</td>
<td data-sort="0.347">34,7%</td>
Als je alleen de zichtbare tekst extraheert, krijg je geformatteerde strings die niet correct sorteren of berekenen.
Extractie met beide waarden:
const cells = document.querySelectorAll('table td');
const data = Array.from(cells).map(cell => ({
display: cell.textContent.trim(),
sortValue: cell.dataset.sort || cell.textContent.trim()
}));
Wanneer Browserextensies Helpen
Goede tabelexporttools verwerken een deel hiervan automatisch:
- CSS-verborgen kolommen kunnen via een optie worden meegenomen
- Data-attributen kunnen als extra kolommen worden geëxtraheerd
- Getalnormalisatie kan "$1,23M" parsen naar 1230000
HTML Table Exporter extraheert zichtbare content met correcte verwerking van samengevoegde cellen en opmaak. Bekijk voor meer complexe extractiebehoeften zonder code onze gids over HTML-tabelscraping met Chrome.
Voor data-attributen en diep verborgen content heb je mogelijk de JavaScript-aanpakken hierboven nodig.
De Inspectie-workflow
Voordat je een tabel extraheert:
- Open DevTools (F12)
- Inspecteer het tabelelement
-
Controleer op:
-
display: noneop kolommen -
data-*attributen op rijen/cellen -
titleattributen met extra informatie - Verborgen childrijen
- "Meer laden"-knoppen
-
- Beslis: Is de zichtbare data genoeg, of heb je de verborgen data nodig?
Meestal is de zichtbare data voldoende. Maar wanneer dat niet zo is, maakt het verschil om te weten hoe je verborgen data vindt en extraheert.
Samenvatting
HTML-tabellen kunnen meerdere lagen data bevatten:
| Laag | Hoe te benaderen |
|---|---|
| Zichtbare tekst | Standaard export |
| CSS-verborgen kolommen | Verwijder display:none of gebruik BeautifulSoup |
| Data-attributen | JavaScript dataset of Python attrs |
| Title/tooltips | Extraheer title-attribuut |
| Ingeklapte rijen | Uitklappen of verborgen klasse verwijderen |
| Lazy-loaded | Activeer eerst het laden |
De data is er meestal. Je moet alleen weten waar je moet zoeken.
Wil je de zichtbare data exporteren? Meer info op gauchogrid.com/nl/html-table-exporter of probeer HTML Table Exporter gratis in de Chrome Web Store.
Top comments (0)