Veebist sisu toomine ja tekstivaade: curl, wget, lynx
Loogika
Veebist sisu toomisel tasub kõigepealt eristada kolme eri ülesannet:
- too üks vastus või fail
- laadi alla terve lehtede puu või jätka katkenud allalaadimist
- 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 jaokswgetallalaadimise, jätkamise ja veebis roomamise jaokslynxHTML-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.txtvõ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äsk | Milleks | Mida tavaliselt näed |
|---|---|---|
curl -I URL | küsi ainult päised | HTTP staatus ja päised |
curl URL | tee üks päring | vastuse sisu terminalis |
wget URL | laadi fail alla | edenemine ja faili nimi |
lynx -dump URL | vaata HTML-i tekstina | lihtsustatud 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:
-Iainult päised-Ljärgi ümbersuunamisi-o failsalvesta kindla nimega-Osalvesta serveri pakutud nimega-svaikne režiim-Snä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:
curlkirjutab vaikimisi väljundi ekraanile- seetõttu sobib ta hästi torude ja filtritega
curlise 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 failsalvesta kindla nimega-cjätka katkenud allalaadimist-P kaustsalvesta kindlasse kausta--recursiverekursiivne allalaadimine--level=1või-l 1piira sügavust--no-parentära mine ülemkataloogidesse--page-requisitestõmba lehe toimimiseks vajalikud failid--convert-linksmuuda lingid lokaalses koopias sobivaks--adjust-extensionpane HTML-failidele sobiv laiend--wait=1ja--random-waitaeglusta 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-parentja õ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õised-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 URLon interaktiivne tekstibrauserlynx -dump URLväljastab ekraanile loetava tekstivaatelynx -dump -listonly URLvä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:
- tõmbad algse HTML-i faili
- teed sellest inimesele loetava tekstiversiooni
- otsid tekstist mustrit
- võtad lingid eraldi nimekirjana välja
See seob hästi kokku ka peatükid grep, sed, sort ja awk.
Mida tasub meeles pidada
curlsobib paremini üksikute päringute ja torude jaokswgetsobib paremini allalaadimiseks ja veebis roomamisekslynxei 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õiwget-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
- Tee
curl -Ipäring aadressilehttps://example.com/. - Salvesta sama leht korraga nii
curl-i kuiwget-iga. - Muuda üks HTML-fail
lynx -dumpabil tekstiks. - Trüki
lynx -dump -listonlyabil välja ainult lingid. - Seleta ühe lausega, millal kasutaksid
curl, millalwgetja millallynx.
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-icurl -L -o leht.html https://example.com/salvesta HTMLwget -O leht.html https://example.com/laadi failicurl -fsSL https://example.com/ | lynx -stdin -dumploe tekstinalynx -dump -listonly https://example.com/kogu lingid
Olulisemad lipud, märgid ja kiirnupud
curl -Ivaata päiseidcurl -Ljärgi suunamistcurl -Osalvesta URL-i lõpuosa nimegawget -cjätka tõmmetlynx -dumptekstvaadelynx -listonlyainult lingid