Sziasztok! Elég kezdő vagyok a témában még de az lenne a feladatom,hogy egy oan basht kell írnom, ami összegyűjti az osszes a ( mindegy melyik oldal pl: az origo) oldalán található
kep vagy képek linkjének cimet. És nem hasznalhatom ki, hogy a wget parancs kepes
rekurzivan letolteni a web oldalakat.
Na most ha ugye a wgetnek simán megadom,hogy http://vwww.vmi.hu akkor ugye azt csak az index html-t szedi és ebben kéne kikeresnem egy greppel a relatív kép hivatkozásokat(img src asszem ez a nevük), majd ezeket amiket kigreppelek letölteni. Csak nem tudom,hogy ha az elején leszedem az index.html-t hogyan tudok keresni. Légyszi segítsetek! Köszi
- 3662 megtekintés
Hozzászólások
Bár nem olyan egyszerű így a feladat mint ahogy elsőre látszik, de már félig meg is oldottad. A két fő lépésből (oldal letöltése és a szűrés) az első már megvan. A másodikhoz szükséged lesz a keresendő minta megállapítására. Tehát az "img src asszem ez a nevük" mellett utána kellene nézned a img tag használatának. Ha ez megvan, meg tudod mondani, hogy pontosan mit is keresel a HTML oldalon, és így felépíthető egy olyan kifejezés a grephez, sedhez, amivel ki tudod szűrni a megfelelő URL-t. Figyelj arra, hogy az img és a src biztosan egymás mellett van-e, milyen karakterek, és hány darab választhatja el ezeket. Ez az URL viszont lehet hogy relatív, nem tartalmaz host részt. Ezt is figyelembe kell venned akkor, amikor összeállítod a teljes URL-t a képek tényleges letöltéséhez.
De először azt kellene megtudni, hogy a feladat szerint milyen eszközök használhatóak, ugyebár a wget rekurzív funkciója tiltott. Van még ilyen? Például egrep, sed, cut, regexp, awk, perl? Illetve mi az ami alkalmazható (iskolai feladat esetén már tanult) dolog?
- A hozzászóláshoz be kell jelentkezni
Igen, csak az a baj,hogy elméletbe értem a feladatot de így gyakorlatban nem igazán tudom megoldani,amúgy elvileg nem a letöltés benne azt mondták nekem, de valami iesmi van írva,hogy ld wget parancs, unique) használata csak ezek nem tudom mire jók.
- A hozzászóláshoz be kell jelentkezni
A gyakorlati megoldásban segítünk, de csak akkor tudunk, ha ismerjük a feltételeket. Ehhez tartozna a pontos feladatkiírás is, és az alkalmazható és tiltott eljárások is. A fórumtagok valószínűleg tíznél több különféle megoldást tudnak adni, de ha ezek a kiírás miatt nem felelnek meg, akkor nincs sok értelme.
A legegyszerűbb a golgota által ajánlott módszer lenne, de ez kiesik.
- A hozzászóláshoz be kell jelentkezni
Látom, közben alakul a dolog, viszont felhívnám a figyelmet a fent említett érdekességekre (amik például a grep használatakor okozhatnak találatvesztést).
Próbáltam egy olyan öszvér HTML példát írni, ami rávilágít a buktatókra, úgymint a tagek sorrendje, betűnagyság, a szeparátor karakterek száma, sortörés, relatív útvonal, többszörös szeparátor az URL-ben:
<IMG id="kep1" alt="Elso kep" logdesc="Juliskarol"
title="Juliska a haz elott" src="../..//juliska képei 2008/Juliska.JPG">
- A hozzászóláshoz be kell jelentkezni
hmm :) Amúgy ha egy oldalra működni fog , már annak is örülni tudok. :D
- A hozzászóláshoz be kell jelentkezni
A fentebb emlegetett probléma simán megoldható, ha a sortöréseket lecseréled szóközre, majd a ">" jeleket ">\n"-re. Ezzel egy tag egy sor, a számodra érdekes tageket grep-pel kinyered, utána már csak darabolni kell a megfelelő helyeken (src=" az elgyik, a következő " meg a másik), és letölteni.
- A hozzászóláshoz be kell jelentkezni
Tudod ha vágnám,hogy hogyan kell pontosan csinálni meg is csinálnám de így. :(
- A hozzászóláshoz be kell jelentkezni
Ha vágnád, hogy hogyan kell, akkor nem iskolai feladatként kapnád. Hint: tr, sed, grep, awk.
- A hozzászóláshoz be kell jelentkezni
Adok főbb részleteket, ötleteket, nézd meg, értsd meg, és próbáld meg összerakni egy scriptbe. Ehhez a lentieken túl nem kell más bonyolultabb dolgot alkalmaznod, csak ciklus (for) és feltételvizsgálat (if).
Valami pszeudokódszerű leírással:
ha sikerült az indexfile letöltése
találjuk meg az img src URL-eket
minden megtalált URL-re:
ha relatív az URL
tegyük elé a protokoll + host + útvonal + "/" részt
ha nem sikerül letölteni a képet
hibaüzenet
különben
hibaüzenet
A teljes URL protokoll-host-path része, a file kivételével:
protohostpath=$(echo $url | sed -r 's/^(.+:\/\/)(.+\/+|.+)\/+.*$/\1\2/')
Indexfile letöltése:
wget -O tmp "$url" >/dev/null 2>&1
Az img tag src része a letöltött indexfile-ból olvasva és visszaírva új sorba, két egyedi(nek vélt) szövegrész közé:
sed -i -r -e 's/<img(\ +|\ +.*\ +)src="([^"]+)".*>/\nIMAGESOURCE=\2=ECRUOSEGAMI\n/gi' tmp
Az URL kivétele:
egrep '^IMAGESOURCE=.+=ECRUOSEGAMI$' tmp | sed -r 's/^IMAGESOURCE=(.+)=ECRUOSEGAMI$/\1/g'
Relatív-e az URL:
if (echo $A | egrep -v '^.+:\/\/.*' >>/dev/null)
Abszolút URL:
A="$protohostpath/$A"
A fentiek nem minden esetben működnek (pl. ékezetes karakterek az img tagen belül, Javascript által összeállított URL stb.), és nem is feltétlen a legegyszerűbben és legpontosabban írtam le, de kiindulásnak jó lehet.
Ha megvagy az összerakással, és nem megy, másold ide az általad írt változatot, és közösen megpróbáljuk javítani.
- A hozzászóláshoz be kell jelentkezni
Ennek lehet néha én is hasznát venném. Ha kész és open source, akkor megoszhatnád velünk! :)
--
Discover It - Have a lot of fun!
- A hozzászóláshoz be kell jelentkezni
Persze csak legyen egy működő verzió. ;)
- A hozzászóláshoz be kell jelentkezni
Hirtelen:
#!/bin/bash
wget -O /tmp/qwertyuiop $1
grep -E -o img\ src\=[[:alnum:][:punct:]]* /tmp/qwertyuiop | cut -d \" -f 2 | xargs wget
rm /tmp/qwertyuiop
Csak abszolút linkekre működik.
--
Debian - The "What?!" starts not!
http://nyizsa.uni.cc
- A hozzászóláshoz be kell jelentkezni
wget --follow-tags=img -r http://host
man wget
--follow-tags=list
Wget has an internal table of HTML tag / attribute pairs that it
considers when looking for linked documents during a recursive
retrieval. If a user wants only a subset of those tags to be con‐
sidered, however, he or she should be specify such tags in a comma-
separated list with this option.
- A hozzászóláshoz be kell jelentkezni
Majd kipróbálom amit írtál ,csak nekem valszín mindenképpen greppel kell megoldanom. :S
- A hozzászóláshoz be kell jelentkezni
"wget --follow-tags=img -r http://host"
És ez megy a -r nélkül is? A topiknyitó ezt írta:
"És nem hasznalhatom ki, hogy a wget parancs kepes rekurzivan letolteni a web oldalakat."
Valószínűleg iskolai feladat, mivel van wget, de ki van kötve, hogy bizonyos funkció nem használható a faladat megoldásához.
- A hozzászóláshoz be kell jelentkezni
elsiklottam felette....bocsi
természetesen megy -r nélkül is a dolog. Ha a -p paramétert is használja, akkor az external weboldalakról is leszedi a képeket ha van ilyen az oldalon. Persze ha a robot.txt engedi az external oldalon.
tehát
wget -E -H -k -K -p --follow-tags=img https://host
persze a paramétereket lehet változtatni :)
- A hozzászóláshoz be kell jelentkezni
Ez is jó és tökéletesen működő változat, és az előzővel együtt ezek a legegyszerűbbek. Viszont ez is rekurzív letöltést használ ki, ámbár nem a --recursive "Turn on recursive retrieving.", hanem a --page-requisites kapcsolóval. Innen már a tanerő értelmezésén múlik a dolog, bár tartok tőle, hogy nem véletlenül van a rekurzió feketelistán, hanem azért, hogy tényleg egy egysorosnál hosszabb bash scriptet kelljen megírnia.
- A hozzászóláshoz be kell jelentkezni
Majd legfeljebb óra után behívja és elfenekeli a tanárnő....whhhúúúúúú :)
- A hozzászóláshoz be kell jelentkezni
Köszi mindenkinek! Amúgy igen valszín egy sorosnál hosszabb bash kell.
- A hozzászóláshoz be kell jelentkezni
Akkor állj fordítva a dologhoz: A sima html-oldalakat töltsd csak le wget-tel, majd az oldalakat find-dal megkeresve add oda egyenként a wget-nek, hogy -most már nem rekurzívan- szedje le a hozzájuk tartozó képeket is. (Jó, ez még így is csak kábé két sor...)
- A hozzászóláshoz be kell jelentkezni
lynx -dump -listonly
Aztan ezt atadni a wget-nek.
- A hozzászóláshoz be kell jelentkezni
Na van egy ien lehetőség a megoldásra valami ilyesmi kellene nekem is ,hogy
#!/bin/bash
url=http://www.origo.hu/
lynx -dump -listonly $url > tmp
cat tmp | grep $url | cut -d . -f2-5 > linkek.txt
wget --input-file=linkek.txt
for ((i=2; i<20; i++))
do
cat index.html | grep 'img src=' | cut -d \" -f $i >>tmp2
done
cat tmp2 | grep 'jpg' > img
wget img
A lynxszel lementem az összes oldalhivatkozást, utána ebből csak azokat hagyom meg, amik belső hivatkozások. Letöltöm a hivatkozásokat és ezekben keresem az img src=-t. Amint látjátok ez elég hiányos Ezek után pedig megkeresem benne a képeket, mert kiszed mindent belőle. És ennél se tudom, hogy kellene megadni több kiterjesztést pl png, gif. Segítségeteket előre is köszi!
- A hozzászóláshoz be kell jelentkezni
cat tmp2 | grep 'jpg\|gif\|png\|jpeg\|mpng\|tiff\|stb' > img
Megj.: Nem ez lesz a megoldás, mert ez így kőbunkós lesz.
- A hozzászóláshoz be kell jelentkezni
De működni fog nem?:D Mármint úgy értem,hogy attól függetlenül letölti a wget gondolom a képeket.
- A hozzászóláshoz be kell jelentkezni
Esetleg valami ilyesmi?
Finomits rajta, mert annyira nem jo...
(index.hu-ra)
wget http://index.hu; for i in $(cat < ./index.html |grep "src=.*" |grep img |awk -F'
hasonlora gondoltal? Nincs benne rekurziv wget... Bar nem ertem miert kellene... Kell az egesz, mondjuk index oldalan levo osszes hivatkozasban talalhato kep is, vagy mifene?
- A hozzászóláshoz be kell jelentkezni
Nem illesztette be, bocs...
wget http://index.hu ; for i in $(cat < ./index.html |grep "src=.*" |grep img |awk -F'
- A hozzászóláshoz be kell jelentkezni
Besz.rok, nem tudom beillesyteni...
wget http://index.hu ; for i in $(cat < ./index.html |grep "src=.*" \
|grep img |awk -F'
|awk -F'"' '{print $1}' |grep -v "?.*="); do wget $i ; done
- A hozzászóláshoz be kell jelentkezni
Meg1x
wget http://index.hu ; for i in $(cat ./index.html |grep "src=.*" |grep img |awk -F'img' '{print $2}' |awk -F'src="' '{print $2}' |awk -F'"' '{print $1}' |grep -v "?.*="); do wget $i ; done
- A hozzászóláshoz be kell jelentkezni
Köszi a segítséget! Tudom,hogy van benne hiba, de nem gondolkodtam ,hogy kb két sorral is meglehet oldani.
- A hozzászóláshoz be kell jelentkezni
Lehet hülyeséget fogok kérdezni illetve mondani, de az awk itt (awk -F'img' '{print $2}' |awk -F'src="' '{print $2}') kiszűri az img és az src-ket úgy,hogy csak a minden sor második szavát teszi bele? ( mármint gondolom azért mert sorszámozza adja át a wget ) és ez a itt a végén mit csinál?|awk -F'"' '{print $1}' |grep -v "?.*=");
Köszi a segítséget!
- A hozzászóláshoz be kell jelentkezni
Az utolsó grep hatására kikerül a listából az összes olyan találat, ahol a kép URL-je kérdőjelet követően paraméterlistát tartalmaz, így ezeket a képeket nem is próblja letölteni. Szerintem ez a rész teljesen felesleges.
"az awk itt ... kiszűri az img és az src-ket úgy,hogy csak a minden sor második szavát teszi bele?"
Az img stringet mint mezőelválasztót használva kiírja a második mező tartalmát (az első a < tag, a második az img utáni maradék a sor végéig). Utána ugyanezt teszi az img helyett a src=" határolóval is. A kettő után az img src URL-je, az azt záró idézőjel, és az utána következő, a sor végéig tartó rész marad.
"...( mármint gondolom azért mert sorszámozza adja át a wget )..."
A wgethez nincs köze, az csak az egy file-t hoz létre a letöltés után.
"és ez a itt a végén mit csinál?"
Az idézőjelet mint szeparátort használva az első mezőt írja ki, ami az src URL-jének végéig tart, így csak az URL marad.
Sajnos ez így az egy sorba írt tagek közül csak az elsőt dolgozza fel, minden sorból csak az elsőt, a többi elveszik. Az "img" helyett érdemes lenne "<img" formában keresni. Illetve mindketőt case insensitive módon, mivel a HTML ezt megengedi.
- A hozzászóláshoz be kell jelentkezni
Köszi
- A hozzászóláshoz be kell jelentkezni
++
-------------
Regényeim:
http://adlibrum.hu/Poliverzum/
http://www.novumverlag.hu/novitaeten/8/?product_id=22&detail=1
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó
- A hozzászóláshoz be kell jelentkezni
Sajnos ez így az egy sorba írt tagek közül csak az elsőt dolgozza fel, minden sorból csak az elsőt, a többi elveszik. Az "img" helyett érdemes lenne "
Ez igy is volt eredetileg, csak nem akarta beillesyteni ide es nagyon kellett sietnem... :D
- A hozzászóláshoz be kell jelentkezni
Stra, szoval jogos az img-re vonatkozo megjegyzes. Eredetileg ott volt a "<" jel is elotte, csak ide nem akarta beleszurni, nekem meg sietnem kellett...
- A hozzászóláshoz be kell jelentkezni