Bash:
HTML:n jäsennys

Kuinka:

Bash ei ole ensisijainen työkalu HTML:n jäsentämiseen, mutta se on mahdollista tehdä työkaluilla kuten grep, awk, sed tai ulkoisilla apuohjelmilla kuten lynx. Robustisuuden vuoksi käytämme xmllintlibxml2-paketista.

# Asenna xmllint tarvittaessa
sudo apt-get install libxml2-utils

# Esimerkki HTML
cat > sample.html <<EOF
<html>
<head>
  <title>Esimerkkisivu</title>
</head>
<body>
  <h1>Hei, Bash!</h1>
  <p id="myPara">Bash voi lukea minut.</p>
</body>
</html>
EOF

# Jäsennä otsikko
title=$(xmllint --html --xpath '//title/text()' sample.html 2>/dev/null)
echo "Otsikko on: $title"

# Poimi kappale ID:n perusteella
para=$(xmllint --html --xpath '//*[@id="myPara"]/text()' sample.html 2>/dev/null)
echo "Kappaleen sisältö on: $para"

Tuloste:

Otsikko on: Esimerkkisivu
Kappaleen sisältö on: Bash voi lukea minut.

Syväsukellus

Aikaisemmin ohjelmoijat käyttivät regex-pohjaisia työkaluja kuten grep HTML:n skannaamiseen, mutta se oli kömpelöä. HTML ei ole säännönmukaista - se on kontekstuaalista. Perinteiset työkalut eivät ota tätä huomioon ja voivat olla virhealttiita.

Vaihtoehtoja? Runsain mitoin. Python kauniin keiton (Beautiful Soup) kanssa, PHP DOMDocumentin kanssa, JavaScript DOM-jäsentäjien kanssa - kielet, joilla on kirjastoja, jotka on suunniteltu ymmärtämään HTML:n rakennetta.

xmllintin käyttö bash-skripteissä on vankkaa yksinkertaisiin tehtäviin. Se ymmärtää XML:n, ja sitä kautta XHTML:n. Säännöllinen HTML voi olla arvaamatonta, kuitenkin. Se ei aina noudata XML:n tiukkoja sääntöjä. xmllint pakottaa HTML:n XML-malliin, joka toimii hyvin muodollisesti oikein muotoillun HTML:n kanssa, mutta voi kompastua sotkuisiin tapauksiin.

Katso myös