Beetaversioon: sisu on enamasti terviklik ja avalikuks katsetamiseks valmis, kuid vajab veel tehnilist, keelelist ja kasutatavuse kontrolli.

Peatüki vaade

Linux/Unix/macOS käsurea kiirõpik

Praegu loed peatükki Veebist sisu toomine ja tekstivaade: curl, wget, lynx, mis kuulub osasse Osa III: Failid, võrk ja süsteemitöö.

Veebist sisu toomine ja tekstivaade: curl, wget, lynx

Loogika

Veebist sisu toomisel tasub kõigepealt eristada kolme eri ülesannet:

  1. too üks vastus või fail
  2. laadi alla terve lehtede puu või jätka katkenud allalaadimist
  3. vaata HTML-i loetava tekstina või kogu sealt linke

Just selle järgi tasub tööriist valida:

  • curl ühe päringu, päiste, API või toor-HTML jaoks
  • wget allalaadimise, jätkamise ja veebis roomamise jaoks
  • lynx HTML-i tekstivaate ja linkide loendi jaoks

Veebikraapimine (scraping) tähendab siin veebist saadud sisu edasist töötlemist käsureal. Kui ametlik API või andmefail on olemas, eelista seda peaaegu alati HTML-i kraapimisele.

Enne kui kraabid

Enne automaatset allalaadimist tasub alati kontrollida mõnda lihtsat asja:

  • kas saidil on olemas API või andmeeksport
  • kas robots.txt või kasutustingimused lubavad seda tööd
  • kas saad alustada väikese prooviga, mitte kohe terve domeeniga
  • kas lisad päringute vahele pausi, kui teed korduvaid tõmbeid
  • kas suudad hiljem tõestada, kust andmed tulid ja millal sa need tõid

Hea reegel on alustada ühe URL-iga, kontrollida tulemust ja alles siis mõelda ulatuslikumale roomamisele.

Kiirülevaade

Eesmärk on veebist sisu tuua kontrollitult: alusta väikesest proovist ja vaata enne, mida server vastab.

KäskMilleksMida tavaliselt näed
curl -I URLküsi ainult päisedHTTP staatus ja päised
curl URLtee üks päringvastuse sisu terminalis
wget URLlaadi fail allaedenemine ja faili nimi
lynx -dump URLvaata HTML-i tekstinalihtsustatud tekstivaade

Päiste vaatamine aitab enne suuremat tõmmet aru saada, kas aadress töötab ja kas server suunab sind mujale.

Tüüpilised algaja vead

  • alustatakse kohe ulatuslikku roomamist, enne kui üks URL on kontrollitud
  • aetakse segi „too üks vastus“ ja „laadi fail alla“
  • unustatakse, et mõistlik on eelistada API-t või andmefaili HTML-i kraapimisele

Kui tööriist puudub

curl on sageli juba olemas, kuid wget ja lynx ei pruugi igas süsteemis vaikimisi paigaldatud olla.

Vali ainult oma süsteemile sobiv paigalduskäsk:

Debianis või Ubuntus:


sudo apt install wget lynx

Fedoras:


sudo dnf install wget lynx

macOS-is Homebrew kaudu:


brew install wget lynx

curl: üks vastus korraga

curl on hea siis, kui tahad täpselt kontrollida, mis päring tehakse ja mida vastuseks saadakse.

Olulised lipud alguses:

  • -I ainult päised
  • -L järgi ümbersuunamisi
  • -o fail salvesta kindla nimega
  • -O salvesta serveri pakutud nimega
  • -s vaikne režiim
  • -S näita viga ka siis, kui kasutad -s

Näited:


curl -I https://example.com/
curl -L -o esileht.html https://example.com/
curl -sL https://example.com/ | grep -i '<title'
curl -sL https://example.com/ | lynx -stdin -dump

Praktiline mõte on siin lihtne:

  • curl kirjutab vaikimisi väljundi ekraanile
  • seetõttu sobib ta hästi torude ja filtritega
  • curl ise ei tee „veebipuud“, vaid ühe või mõne konkreetse päringu

wget: allalaadija ja veebis roomaja

wget on mugav siis, kui tahad, et fail päriselt kettale jääks, või kui tahad teha piiratud rekursiivset allalaadimist.

Olulised lipud alguses:

  • -O fail salvesta kindla nimega
  • -c jätka katkenud allalaadimist
  • -P kaust salvesta kindlasse kausta
  • --recursive rekursiivne allalaadimine
  • --level=1 või -l 1 piira sügavust
  • --no-parent ära mine ülemkataloogidesse
  • --page-requisites tõmba lehe toimimiseks vajalikud failid
  • --convert-links muuda lingid lokaalses koopias sobivaks
  • --adjust-extension pane HTML-failidele sobiv laiend
  • --wait=1 ja --random-wait aeglusta roomamist

Näited:


wget https://example.com/
wget -O esileht.html https://example.com/
wget -c -O esileht-koopia.html https://example.com/

Piiratud ulatusega roomamine:


wget --recursive --level=1 --no-parent https://example.com/

Kui tahad teha lokaalse koopiana väikest dokumentatsioonipuud, siis mall on näiteks selline:


wget \
  --mirror \
  --convert-links \
  --adjust-extension \
  --page-requisites \
  --no-parent \
  --wait=1 \
  --random-wait \
  https://docs.example.org/juhend/

Seda viimast käsku ei tasu kunagi pimesi suure saidi juures käivitada. Kõigepealt kontrolli alati:

  • kui suur ala sul tegelikult vaja on
  • kas --no-parent ja õige alg-URL piiravad töö piisavalt kitsaks
  • kas serverile on mõistlik teha nii palju päringuid

lynx: HTML tekstiks ja lingid eraldi

lynx on kasulik siis, kui veebileht on vaja teha kiiresti loetavaks tekstiks.

See on hea tööriist näiteks siis, kui:

  • tahad lehte lugeda terminalist
  • tahad HTML-ist saada lihtsa tekstivaate
  • tahad linkide nimekirja eraldi kätte
  • tahad torust tuleva HTML-i kiiresti puhastada enne grep-i või sed-i

Kõige tavalisemad töökujud:


lynx https://example.com/
lynx -dump https://example.com/
lynx -dump -listonly https://example.com/

Kui HTML on juba failis, saad sama teha kohalikult:


lynx -dump naide-curl.html
lynx -dump -listonly naide-curl.html

Vahe on lihtne:

  • lynx URL on interaktiivne tekstibrauser
  • lynx -dump URL väljastab ekraanile loetava tekstivaate
  • lynx -dump -listonly URL väljastab ainult lingid

Väike veebikraapimise töövoog

Kui eesmärk ei ole „terve sait alla“, vaid „too üks leht ja töötle seda“, siis üks praktiline töövoog on:


curl -L -o leht.html https://example.com/
lynx -dump leht.html > leht.txt
grep -n 'Example' leht.txt
lynx -dump -listonly leht.html > lingid.txt
wc -l lingid.txt

See töövoog on hea, sest iga samm on kontrollitav:

  1. tõmbad algse HTML-i faili
  2. teed sellest inimesele loetava tekstiversiooni
  3. otsid tekstist mustrit
  4. võtad lingid eraldi nimekirjana välja

See seob hästi kokku ka peatükid grep, sed, sort ja awk.

Mida tasub meeles pidada

  • curl sobib paremini üksikute päringute ja torude jaoks
  • wget sobib paremini allalaadimiseks ja veebis roomamiseks
  • lynx ei ole roomaja, vaid tekstivaate ja linkide tööriist
  • HTML-i kraapimine on habras, sest lehe struktuur võib muutuda
  • JavaScriptiga loodud sait ei pruugi anda curl-ile või wget-ile sama sisu, mida näeb brauser

Kui näed, et info tuleb lehele alles JavaScripti abil, siis puhas curl või wget ei pruugi sulle tegelikku sisu anda. Siis tasub otsida:

  • ametlikku API-t
  • JSON-vastust brauseri võrgupaneelist
  • ekspordifaili, näiteks CSV või JSON

Minitest

  1. Tee curl -I päring aadressile https://example.com/.
  2. Salvesta sama leht korraga nii curl-i kui wget-iga.
  3. Muuda üks HTML-fail lynx -dump abil tekstiks.
  4. Trüki lynx -dump -listonly abil välja ainult lingid.
  5. Seleta ühe lausega, millal kasutaksid curl, millal wget ja millal lynx.

Peatüki täisspikker

Praktiline kasutus

Eesmärk

vali curl ühe vastuse või päiste jaoks, wget allalaadimise jaoks ja lynx HTML-i rahulikuks tekstivaateks

Põhikujud

  • curl -I https://example.com/kontrolli URL-i
  • curl -L -o leht.html https://example.com/salvesta HTML
  • wget -O leht.html https://example.com/laadi faili
  • curl -fsSL https://example.com/ | lynx -stdin -dumploe tekstina
  • lynx -dump -listonly https://example.com/kogu lingid

Olulisemad lipud, märgid ja kiirnupud

  • curl -Ivaata päiseid
  • curl -Ljärgi suunamist
  • curl -Osalvesta URL-i lõpuosa nimega
  • wget -cjätka tõmmet
  • lynx -dumptekstvaade
  • lynx -listonlyainult lingid