Nettskraping og boter · leksjon

XPath for robust utvelging

Oppdag XPath som et kraftig språk for navigering i XML- og HTML-dokumenter, slik at du kan hente ut svært spesifikke data.

Leksjon 3 av 411 trinn

XPath for robust utvelging er en gratis leksjon i Nettskraping og boter på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Nettskraping og boter, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Nettskraping og boter inneholder totalt 4 leksjoner.

Hva er XPath?

Velkommen til XPath! Det står for XML Path Language og er et kraftig verktøy for å navigere i og velge noder i XML- og HTML-dokumenter.

Tenk på det som et spesialisert språk for å finne bestemte informasjonsbiter i strukturen til en nettside.

  • XPath er svært fleksibelt for komplekse utvalg.
  • Det gjør det mulig å navigere i alle retninger (oppover, nedover og sidelengs).
  • Det er avgjørende for robust datauthenting.

XPath og dokumenttreet

Før vi ser nærmere på syntaksen, skal vi forstå hvordan XPath «ser» et dokument. Det betrakter HTML/XML som en trestruktur.

  • Hvert element, attributt og til og med hver tekst er en «node» i dette treet.
  • XPath-uttrykk fungerer som veibeskrivelser som leder Dem fra roten av treet til de bestemte nodene De vil finne.

Denne tremodellen gjør det mulig å navigere presist og hierarkisk.

Velge etter tagnavn

Den enkleste måten å velge elementer på er etter tagnavnet deres. Vi bruker // for å velge elementer hvor som helst i dokumentet, eller / for direkte underordnede elementer.

For eksempel velger //h1 alle <h1>-elementer.

Vi bruker Pythons lxml-bibliotek i eksemplene våre.

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())

Målrette elementer etter attributt

Ofte trenger De å velge elementer basert på attributtene deres, for eksempel id eller class. XPath bruker predikater ([]) til dette.

Bruk @attribute for å referere til et attributt. For eksempel velger //div[@class='product-card'] alle <div>-elementer med 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

Finne elementer etter tekst

XPath kan også finne elementer basert på det synlige tekstinnholdet deres. Dette er svært nyttig for å finne bestemte etiketter eller verdier.

  • Bruk text() for å referere til den direkte teksten i et element.
  • Bruk contains(text(), 'part') for å finne elementer der teksten inneholder en bestemt delstreng.

For eksempel finner //p[text()='$19.99'] et avsnitt med nøyaktig denne prisen.

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())

Navigere oppover og nedover i treet

XPath lar Dem bevege Dem rundt i dokumenttreet. Bruk / for direkte underordnede noder og // for enhver etterkommer.

  • div/p: Velger <p>-elementer som er direkte underordnede elementer av <div>.
  • //div//p: Velger <p>-elementer som er etterkommere av en hvilken som helst <div>, uansett hvor dypt de ligger.
  • /parent::div: Velger den overordnede <div>-en til den gjeldende noden.
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())

Filtrere med posisjonsbaserte predikater

Predikater ([]) kan også filtrere elementer basert på plasseringen deres blant søskenelementene. Dette er nyttig for å velge det første, siste eller et bestemt element i en liste.

  • //li[1]: Velger det første <li>-elementet.
  • //li[last()]: Velger det siste <li>-elementet.
  • //div[position()=2]: Velger det andre <div>-elementet.
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())

Komplekse utvalg med and/or

De kan kombinere flere betingelser i et predikat ved hjelp av and eller or for å gjøre utvalget enda mer presist.

  • //a[@href and @class='button']: Velger <a>-tagger som både har attributtet href OG en class med verdien 'button'.
  • //p[@class='price' or contains(text(), 'Sale')]: Velger avsnitt med class 'price' ELLER som inneholder teksten '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())

Praktisk uthenting: produktpris

La oss sette alt sammen. Tenk Dem at De vil hente ut prisen på «Product B» fra en liste over produkter. Vi kan kombinere attributtvalg og hierarki.

Først finner vi det bestemte produktkortet, og deretter navigerer vi til priselementet.

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-utfordring

Se på følgende HTML-utdrag:

<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>

Oppsummering: XPath for presisjon

Gratulerer! De har lært det grunnleggende om XPath, et svært allsidig språk for navigering i og valg av elementer i HTML- og XML-dokumenter.

  • XPath bruker en tremodell til å representere dokumenter.
  • De kan velge elementer etter tagg, attributt, tekstinnhold og plassering.
  • Predikater [] og operatorer som and/or gjør det mulig å målrette svært presist.

Ved å mestre XPath vil De i betydelig grad forbedre evnen til å hente ut nøyaktig de dataene De trenger fra komplekse nettsider. Fortsett å øve!

Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «XPath for robust utvelging» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Nettskraping og boter, inkludert «XPath for robust utvelging», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Nettskraping og boter inneholder totalt 4 leksjoner.

Hva lærer jeg i «XPath for robust utvelging»?

Oppdag XPath som et kraftig språk for navigering i XML- og HTML-dokumenter, slik at du kan hente ut svært spesifikke data. Du øver på Nettskraping og boter med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Nettskraping og boter?

Ingen tidligere erfaring er nødvendig. Nettskraping og boter på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «XPath for robust utvelging»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Nettskraping og boter-leksjonen?

Ja. Alle Nettskraping og boter-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Navigering i komplekse HTML-strukturer
  2. CSS-selektorer for presisjon
  3. XPath for robust utvelging
  4. Hente ut data fra HTML-tabeller
← Tilbake til Nettskraping og boter