Veebist sisu toomine ja tekstivaade: curl, wget, lynx
Selles peatükis vaatame, kuidas veebist sisu alla tuua, HTML-i tekstiks muuta ja vajadusel teha väike kontrollitud crawl.
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 katkestatud tõmmet
- vaata HTML-i loetava tekstina või kogu sealt lingid kokku
Just selle järgi tasub tööriist valida:
curlühe päringu, päiste, API või toor-HTML jaokswgetallalaadimise, jätkamise ja crawl'i jaokslynxHTML-i tekstivaate ja linkide loendi jaoks
Sõna “scrape” tähendab siin lihtsalt seda, et võtad veebist sisu ja töötled seda edasi käsureal. Kui ametlik API või andmefail on olemas, siis 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: alusta ühe URL-iga, kontrolli tulemust ja alles siis mõtle suurema crawl'i peale.
Kiirspikker
curl -I URLküsib ainult päisedcurl -L -o fail.html URLsalvestab vastuse faili ja järgib ümbersuunamisicurl -sL URL | lynx -stdin -dumpmuudab veebilehe tekstikswget URLlaeb URL-i vaikimisi failiwget -c URLjätkab katkestatud allalaadimistwget --recursive --level=1 --no-parent URLteeb väikese piiratud crawl'ilynx URLavab tekstilise veebivaate interaktiivseltlynx -dump URLtrükib lehe teksti koos viidetega väljalynx -dump -listonly URLtrükib välja ainult linkide nimekirja
Kui tööriist puudub
curl on sageli juba olemas, kuid wget ja lynx ei pruugi igas süsteemis vaikimisi paigaldatud olla.
sudo apt install wget lynx
sudo dnf install wget lynx
brew install wget lynx
Käivita need käsud
See plokk näitab ühe väikese ohutu töövoo:
- vaata, kas URL üldse vastab
- salvesta leht faili
- muuda HTML tekstiks
- kogu linkide nimekiri eraldi välja
mkdir -p veeb-naide
cd veeb-naide
curl -I https://example.com/
curl -L -o naide-curl.html https://example.com/
wget -O naide-wget.html https://example.com/
lynx -dump naide-curl.html | sed -n '1,20p'
lynx -dump -listonly https://example.com/
ls -lh
Kui tahad veebist tulnud HTML-i kohe torusse panna, siis tee nii:
curl -sL https://example.com/ | lynx -stdin -dump | sed -n '1,20p'
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 reziim-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 crawler
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 katkestatud tõmmet-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-waittee viisakam crawl
Näited:
wget https://example.com/
wget -O esileht.html https://example.com/
wget -c -O esileht-koopia.html https://example.com/
Väike piiratud crawl:
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 suvalise suure saidi juurel 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 välja
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 sul on HTML juba failis, siis saad sama teha lokaalselt:
lynx -dump naide-curl.html
lynx -dump -listonly naide-curl.html
Vahe on lihtne:
lynx URLon interaktiivne tekstibrauserlynx -dump URLprindib loetava tekstivaate ekraanilelynx -dump -listonly URLprindib ainult lingid
Väike scrape-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 allalaadimise ja crawl'i jaokslynxei ole “crawler”, vaid tekstivaate ja linkide tööriist- HTML-i scrape on habras, sest lehe struktuur võib muutuda
- JavaScriptiga ehitatud sait ei pruugi anda
curl-ile võiwget-ile sama pilti, 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
- eksportfaili nagu 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.