Webscraping en bots · Les

XPath voor robuuste selectie

Ontdek XPath als krachtige taal voor het navigeren door XML- en HTML-documenten, waarmee u zeer specifieke gegevens kunt ophalen.

Les 3 van 411 stappen

XPath voor robuuste selectie is een gratis Webscraping en bots-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Webscraping en bots. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Webscraping en bots bevat in totaal 4 lessen.

Wat is XPath?

Welkom bij XPath! Het staat voor XML Path Language en is een krachtig hulpmiddel om door knooppunten in XML- en HTML-documenten te navigeren en deze te selecteren.

Zie het als een gespecialiseerde taal om specifieke stukjes informatie binnen de structuur van een webpagina te vinden.

  • XPath is bijzonder flexibel voor complexe selecties.
  • Je kunt er in elke richting mee navigeren: omhoog, omlaag en zijwaarts.
  • Het is essentieel voor betrouwbare gegevensextractie.

XPath en de documentboom

Voordat we de syntaxis bekijken, moeten we begrijpen hoe XPath een document "ziet". Het beschouwt HTML/XML als een boomstructuur.

  • Elk element, attribuut en zelfs elke tekst is een "knooppunt" in deze boom.
  • XPath-expressies zijn als routeaanwijzingen die je van de wortel van de boom naar de specifieke knooppunten leiden die je wilt vinden.

Dankzij dit boommodel kun je nauwkeurig en hiërarchisch navigeren.

Selecteren op tagnaam

De eenvoudigste manier om elementen te selecteren is op basis van hun tagnaam. We gebruiken // om elementen overal in het document te selecteren, of / voor directe kinderen.

Zo selecteert //h1 alle <h1>-elementen.

Voor onze voorbeelden gebruiken we de Python-bibliotheek lxml.

from lxml import html

html_doc = """
<html>
<body>
  <h1>My Product Page</h1>
  <div class="product-list">
    <h2>Product A</h2>
  </div>
</body>
</html>
"""

tree = html.fromstring(html_doc)
# Select all h1 tags
results = tree.xpath("//h1")

for element in results:
    print(element.text_content())

Elementen selecteren op basis van een attribuut

Vaak moet je elementen selecteren op basis van hun attributen, zoals id of class. XPath gebruikt hiervoor predicaten ([]).

Gebruik @attribute om naar een attribuut te verwijzen. Zo selecteert //div[@class='product-card'] alle <div>-elementen met class="product-card".

from lxml import html

html_doc = """
<html>
<body>
  <div class="product-card" id="p1">
    <h2>Product A</h2>
  </div>
  <div class="product-card" id="p2">
    <h2>Product B</h2>
  </div>
</body>
</html>
"""

tree = html.fromstring(html_doc)
# Select div elements with class 'product-card'
results = tree.xpath("//div[@class='product-card']")

for element in results:
    print(element.get('id')) # Get the id attribute

Elementen vinden op basis van tekst

Met XPath kun je ook elementen vinden op basis van hun zichtbare tekst. Dit is erg krachtig om specifieke labels of waarden te vinden.

  • Gebruik text() om naar de directe tekst van een element te verwijzen.
  • Gebruik contains(text(), 'part') om elementen te vinden waarvan de tekst een specifieke deeltekenreeks bevat.

Zo vindt //p[text()='$19.99'] een alinea met precies die prijs.

from lxml import html

html_doc = """
<html>
<body>
  <p class="price">$19.99</p>
  <p class="price">$29.50</p>
  <span>In Stock!</span>
</body>
</html>
"""

tree = html.fromstring(html_doc)
# Select p elements containing '$19.99'
results = tree.xpath("//p[text()='$19.99']")

for element in results:
    print(element.text_content())

Omhoog en omlaag navigeren in de boom

Met XPath kun je door de documentboom bewegen. Gebruik / voor directe kindknooppunten en // voor elke afstammeling.

  • div/p: selecteert <p>-elementen die directe kinderen van <div> zijn.
  • //div//p: selecteert <p>-elementen die afstammelingen van een <div> zijn, ongeacht hoe diep ze genest zijn.
  • /parent::div: selecteert de bovenliggende <div> van het huidige knooppunt.
from lxml import html

html_doc = """
<html>
<body>
  <div class="product-card">
    <h2>Product A</h2>
    <p class="price">$19.99</p>
  </div>
  <div class="footer">
    <p>Copyright</p>
  </div>
</body>
</html>
"""

tree = html.fromstring(html_doc)
# Find the price within a product-card
results = tree.xpath("//div[@class='product-card']/p[@class='price']")

for element in results:
    print(element.text_content())

Filteren met positionele predicaten

Met predicaten ([]) kun je elementen ook filteren op basis van hun positie tussen broers en zussen. Dit is handig om het eerste, laatste of een specifiek item in een lijst te selecteren.

  • //li[1]: selecteert het eerste <li>-element.
  • //li[last()]: selecteert het laatste <li>-element.
  • //div[position()=2]: selecteert het tweede <div>-element.
from lxml import html

html_doc = """
<html>
<body>
  <ul>
    <li>Item One</li>
    <li>Item Two</li>
    <li>Item Three</li>
  </ul>
</body>
</html>
"""

tree = html.fromstring(html_doc)
# Select the second list item
results = tree.xpath("//ul/li[2]")

for element in results:
    print(element.text_content())

Complexe selecties met and/or

Je kunt meerdere voorwaarden binnen een predicaat combineren met and of or om je selecties nog nauwkeuriger te maken.

  • //a[@href and @class='button']: selecteert <a>-tags die zowel een href-attribuut als een class met de waarde 'button' hebben.
  • //p[@class='price' or contains(text(), 'Sale')]: selecteert alinea's met de klasse 'price' OF met de tekst 'Sale'.
from lxml import html

html_doc = """
<html>
<body>
  <a href="/link1" class="button">Link 1</a>
  <a href="/link2">Link 2</a>
  <a class="button">Link 3</a>
</body>
</html>
"""

tree = html.fromstring(html_doc)
# Select 'a' tags that have both 'href' and 'class="button"'
results = tree.xpath("//a[@href and @class='button']")

for element in results:
    print(element.text_content())

Praktische extractie: productprijs

We voegen alles samen. Stel dat je de prijs van "Product B" uit een lijst met producten wilt halen. We kunnen selectie op basis van attributen en hiërarchie combineren.

Eerst zoeken we de specifieke productkaart en daarna navigeren we naar het prijselement.

from lxml import html

html_doc = """
<html>
<body>
  <div class="product-list">
    <div class="product-card" id="p1"><h2>Product A</h2><p class="price">$19.99</p></div>
    <div class="product-card" id="p2"><h2>Product B</h2><p class="price">$29.50</p></div>
    <div class="product-card" id="p3"><h2>Product C</h2><p class="price">$5.00</p></div>
  </div>
</body>
</html>
"""

tree = html.fromstring(html_doc)
# Find the price of Product B
xpath_exp = "//div[@id='p2']/p[@class='price']"
results = tree.xpath(xpath_exp)

for element in results:
    print(element.text_content())

XPath-uitdaging

Bekijk het volgende HTML-fragment:

<div class="container">
  <ul id="main-menu">
    <li>Home</li>
    <li class="active">About Us</li>
    <li>Contact</li>
  </ul>
  <div class="content">
    <p>Welcome!</p>
    <a href="/learn">Learn More</a>
  </div>
</div>

Samenvatting: XPath voor precisie

Gefeliciteerd! Je hebt de basisbeginselen van XPath geleerd, een zeer veelzijdige taal om door elementen in HTML- en XML-documenten te navigeren en deze te selecteren.

  • XPath gebruikt een boommodel om documenten weer te geven.
  • Je kunt elementen selecteren op tag, attribuut, tekstinhoud en positie.
  • Met predicaten [] en operatoren zoals and/or kun je uiterst precies selecteren.

Als je XPath beheerst, kun je aanzienlijk beter precies de gegevens uit complexe webpagina's halen die je nodig hebt. Blijf oefenen!

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “XPath voor robuuste selectie” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Webscraping en bots, waaronder “XPath voor robuuste selectie”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Webscraping en bots bevat in totaal 4 lessen.

Wat leer ik in “XPath voor robuuste selectie”?

Ontdek XPath als krachtige taal voor het navigeren door XML- en HTML-documenten, waarmee u zeer specifieke gegevens kunt ophalen. Je oefent met Webscraping en bots door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Webscraping en bots te beginnen?

Ervaring vooraf is niet nodig. Webscraping en bots op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “XPath voor robuuste selectie”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Webscraping en bots?

Ja. Elke les over Webscraping en bots bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Complexe HTML-structuren doorlopen
  2. CSS-selectors voor precisie
  3. XPath voor robuuste selectie
  4. Gegevens uit HTML-tabellen extraheren
← Terug naar Webscraping en bots