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 xmllint
iä libxml2
-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.
xmllint
in 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
- W3Schools - HTML DOM Jäsentäjä: Avaa HTML DOM:n saloja.
- MDN Web Docs - XML:n jäsentäminen ja serialisointi: XML:n jäsentämisen periaatteita, jotka pätevät XHTML:ssä.
- Beautiful Soup -dokumentaatio: Python-kirjasto HTML:n jäsentämiseen.
- libxml2 -dokumentaatio: Tietoja
xmllint
istä ja liittyvistä XML-työkaluista.