Link (href) Extractor

Plak HTML-broncode en haal elke link eruit — alle href-URL's, ontdubbeld en één per regel weergegeven, klaar om te kopiëren of downloaden.

1.043 weergaven

Hoe het werkt

Plak HTML-broncode — de uitvoer van 'paginabron bekijken', de inhoud van een opgeslagen .html-bestand, of een willekeurig gekopieerd fragment — en de tool geeft die tekst door aan de eigen HTML-parser van de browser in plaats van aan een met de hand geschreven reguliere expressie (regex). Dat verschil is belangrijker dan het klinkt. HTML uit de praktijk is op manieren rommelig waar een naïeve regex op vastloopt: een attribuut kan tussen dubbele aanhalingstekens, enkele aanhalingstekens of helemaal zonder aanhalingstekens staan (href=over.html is technisch gezien geldige HTML), een tag kan zelfsluitend zijn of niet, en tags kunnen vele niveaus diep genest zitten, over meerdere regels lopen, of verstopt zitten in commentaar en <script>-blokken die zelf ook punthaken bevatten. Een parser van browserkwaliteit heeft twee decennia besteed aan het absorberen van al deze uitzonderingen, omdat hij verplicht is te renderen welke pagina hem ook wordt aangeboden, hoe misvormd de opmaak ook is — de extractor op diezelfde motor bouwen, in plaats van patroonherkenning voor tags opnieuw uit te vinden, is wat hem betrouwbaar maakt op opmaak die u zelf niet heeft geschreven, zoals een gescrapete concurrentiepagina of een oude campagne-export.

Zodra de parser een structurele boom heeft opgebouwd uit de geplakte opmaak, wordt de href van elk <a>-element rechtstreeks gelezen als eigenschap van dat element, in plaats van als ruwe tekst uit een string — wat meteen aanhalingstekenkwesties en losse punthaken in commentaar omzeilt die een patroonmatch anders om de tuin zouden kunnen leiden. De resulterende lijst met URL's wordt vervolgens ontdubbeld en één per regel weggeschreven, klaar om naar het klembord te kopiëren of als platte-tekstbestand te downloaden.

Concreet voorbeeld: de HTML van een pagina bevat <a href='/prijzen'>, <a href="https://voorbeeld.com/blog"> en een kale <a href=mailto:[email protected]> zonder enige aanhalingstekens — drie verschillende aanhalingsstijlen in drie regels. Een regex geschreven om href="..." te matchen zou de enkel aangehaalde en niet-aangehaalde gevallen stilzwijgend missen; de parser leest alle drie identiek, omdat het voor een browser simpelweg attribuutwaarden zijn, ongeacht hoe — of zelfs óf — ze zijn aangehaald.

Wat u moet weten

  • Relatieve URL's zoals /prijzen of ../blog/bericht worden precies zo geëxtraheerd als ze zijn geschreven, niet omgezet naar volledige https://...-adressen. Een relatief pad omzetten naar een absolute URL vereist kennis van de basis-URL van de pagina — meestal het adres waar de HTML oorspronkelijk vandaan kwam, of een expliciete <base>-tag — en een geplakt fragment draagt geen van beide op zichzelf mee.
  • De tool haalt zelf nooit een URL op; hij leest alleen de HTML die u aanlevert. Dat is een bewuste grens: de uitgaande links van een pagina op deze manier controleren vereist helemaal geen serververzoek vanaf deze site, alleen vanaf de browser die u al gebruikte om de bron te bekijken of op te slaan.
  • mailto:- en tel:-links komen precies zo door als elke andere href, omdat de parser geen onderscheid maakt naar schema — alles wat in een href-attribuut staat, telt mee als een link die het waard is om te vermelden.

Veelgestelde vragen

Haalt het de pagina zelf op, of moet ik de HTML aanleveren?

U levert de HTML aan — plak de uitvoer van paginabron bekijken, de inhoud van een opgeslagen .html-bestand, of een willekeurig HTML-fragment. De tool haalt zelf nooit URL's op (dat zou een serververzoek vereisen dat deze site niet doet).

Zijn relatieve links inbegrepen, en worden ze omgezet naar volledige URL's?

Relatieve links (bijv. /over-ons of ../pagina.html) worden precies zoals in de bron geschreven geëxtraheerd, nooit omgezet naar absolute URL's. Dat omzetten vereist kennis van de basis-URL van de pagina — meestal het adres waar de HTML vandaan kwam — en een geplakt fragment draagt dat niet op zichzelf mee.

Zitten mailto:- en tel:-links er ook bij?

Ja — ongeacht het schema wordt elke href-waarde geëxtraheerd, omdat de parser het attribuut zelf leest zonder te filteren op het soort link.

Waarom wordt er geparst met de DOM-motor van de browser in plaats van een regex — maakt dat echt uit?

Het maakt vooral uit bij rommelige HTML uit de praktijk. Een regex die is afgestemd op één aanhalingsstijl (zeg, dubbel aangehaald href="...") mist stilzwijgend enkel aangehaalde of niet-aangehaalde attributen, zelfsluitende varianten, en hrefs die diep genest of in misvormde opmaak verstopt zitten. De DOM-parser behandelt dat allemaal zoals een browser dat zou doen bij het renderen van de pagina, omdat het dezelfde onderliggende motor is.

Vangt de tool ook links in geminificeerde of ernstig kapotte HTML?

In vrijwel alle gevallen wel. Browsers zijn gebouwd om pagina's te renderen die verre van perfect gevormd zijn — ontbrekende sluitende tags, inconsistente nesting, geminificeerde eenregelige opmaak — en diezelfde tolerante parsing geldt ook hier, wat precies het voordeel is ten opzichte van een strikte regex die schone, netjes geformatteerde invoer verwacht.

Reacties

Nog geen reacties — schrijf de eerste!

Vergelijkbare tools