[Risolto] Wget per url da pagina web

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Wget per url da pagina web

Messaggio da UbuNuovo »

dopo il ciclo si potrebbe fare un controllo sulla variabile "tampone" e se non è vuota scriverne il contenuto.
Se capita Crap un consiglio te lo da.
Altrimenti invece della variabile si usa direttamente il file che viene scritto in append mode (>>) ad ogni ciclo così siamo sicuri di non perdere dati.
Salva l'Ucraina! 🇺🇦
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Wget per url da pagina web

Messaggio da crap0101 »

Non ho capito bene la faccenda di split, in particolare:
gennysa [url=http://forum.ubuntu-it.org/viewtopic.php?p=4780589#p4780589][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Il comando che mi hai gentilmente postato mi crea il file resul.txt con i link filtrati alla fine del processo, e riesco a splittarlo senza problemi.
Ma anzichè attendere la fine volevo mi creasse un file ogni 10 link trovati..
con -l N crea appunto un file ogni N linee... tu vuoi anche che crei un file generale result.txt con tutti i link? E in questo caso, solo quelli filtrati o anche quelli non filtrati? e che intendi per "attendere la fine"?
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Wget per url da pagina web

Messaggio da UbuNuovo »

No, lui vorrebbe che i file fossero creati appena passati i primi 10 link il primo file, dopo altri 10 link il secondo file e così via.
Split invece crea i file tutti insieme quando il passaggio di dati è terminato.
Salva l'Ucraina! 🇺🇦
gennysa
Prode Principiante
Messaggi: 89
Iscrizione: giovedì 9 luglio 2015, 21:45
Distribuzione: Ubuntu 18.04 LTS
Sesso: Maschile

Re: Wget per url da pagina web

Messaggio da gennysa »

Attendere alla fine perché adesso con il codice che sto usando mi crea il file txt quando ha finito di leggere tutta la pagina.
Se mi crea i file man mano che legge quello generale alla fine non serve più.
Solo quelli filtrati vanno più che bene.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Wget per url da pagina web

Messaggio da UbuNuovo »

Vado a letto, comunque ora so cosa si deve fare. Domani provo a fare lo script.
Salva l'Ucraina! 🇺🇦
gennysa
Prode Principiante
Messaggi: 89
Iscrizione: giovedì 9 luglio 2015, 21:45
Distribuzione: Ubuntu 18.04 LTS
Sesso: Maschile

Re: Wget per url da pagina web

Messaggio da gennysa »

Io a modo mio ci provo. . Grazie. . Notte..
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Wget per url da pagina web

Messaggio da UbuNuovo »

mi è venuto un dubbio!
Avevi fatto così:

Codice: Seleziona tutto

URL='http://www.sito.it'
PAROLA='/link_'
wget -nd -nv -rl1 --spider "$URL" 2>&1 | tee non_filtrato.txt | grep -Po "URL:\s?\K(.*$PAROLA.*?)\s+" | split -l 10 -d - file_rid-
 e non ti andava bene? Giusto?
Salva l'Ucraina! 🇺🇦
gennysa
Prode Principiante
Messaggi: 89
Iscrizione: giovedì 9 luglio 2015, 21:45
Distribuzione: Ubuntu 18.04 LTS
Sesso: Maschile

Re: Wget per url da pagina web

Messaggio da gennysa »

Non ricordo. . Domani mattina ci guardo...
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Wget per url da pagina web

Messaggio da crap0101 »

UbuNuovo [url=http://forum.ubuntu-it.org/viewtopic.php?p=4780668#p4780668][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:No, lui vorrebbe che i file fossero creati appena passati i primi 10 link il primo file, dopo altri 10 link il secondo file e così via.
Split invece crea i file tutti insieme quando il passaggio di dati è terminato.
ah ok... avevo pensato a stdbuf, ma il problema è proprio di come split gestisce la scrittura dei file (non la lettura dell'input) e non mi pare ci si possa fare nulla; ha l'opzione -u che però funziona solo con -n che in ogni caso non va bene.

Per cui la soluzione sarebbe appunto come dici crearsi uno split "su misura", tipo questo:

Codice: Seleziona tutto

crap0101@orange:/tmp/foo$ cat s.sh
function _split () {
    local nfile=0
    local nline=0
    while read line; do
        if ((nline % 10 == 0)); then
            let nfile+=1 nline=0
        fi
        echo "$line" >> ${nfile}.txt
        let nline+=1
    done
}

(seq 12;sleep 1;seq 12;sleep 1;seq 5) | _split
crap0101@orange:/tmp/foo$ bash s.sh 
crap0101@orange:/tmp/foo$ l
1.txt  2.txt  3.txt  s.sh
crap0101@orange:/tmp/foo$ stat -c %Y *txt
1436920307
1436920308
1436920309
(gli sleep tra i seq servono per allungare i tempi, altrimenti fa troppo in fretta)
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
gennysa
Prode Principiante
Messaggi: 89
Iscrizione: giovedì 9 luglio 2015, 21:45
Distribuzione: Ubuntu 18.04 LTS
Sesso: Maschile

Re: Wget per url da pagina web

Messaggio da gennysa »

Non è per me... non so neanche da dove cominciare..
ho provato a costruire ma mi da o comand not found oppure invalid syntax..
Non riesco nemmeno a provare...
poi c'è il codice di wget che non so dove metterlo..

ora provo se riesco ad inserirli in una tabella sql..
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Wget per url da pagina web

Messaggio da UbuNuovo »

ieri avevo postato, pensavo di aver postato anche questo

Codice: Seleziona tutto

#!/bin/bash

URL='http://www.sito.it'
PAROLA='/link_'
n_ris=10
n_link=1
n_file=1
wget -nd -nv -rl1 --spider "$URL" 2>&1 | tee non_filtrato.txt | grep -Po "URL:\s?\K(.*$PAROLA.*?)\s+" | while read link
do
	echo "$link" >> rid_$n_file.txt
(( n_link++ ))
if [ $n_link -gt $n_ris ]; then 
	(( n_file++ ))
	n_link=1;
fi
done
Ma probabilmente non l'ho inviato e mi sono accorto ora che non c'èra.
Comunque mi pare che stampi ugualmente in ritardo.

edit:
Ora provo ad usare la funzione di Crap su wget (che è quasi uguale a come ho fatto io solo che usa modulo, cosa che era stato il mio primo pensiero)
riedit:
nisba! Scrive i file a scaricamento terminato!
Infatti stanotte avevo fatto una prova con il solo echo sul ciclo while e ugualmente la stampa veniva fatta a fine scaricamento... avevo provato a levare 'tee' ma stesso risultato quindi pare che sia grep che vuole aspettare la fine dello stream.
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Wget per url da pagina web

Messaggio da UbuNuovo »

Trovato il baco!!!
Si deve usare '--line-buffered' come opzione di grep!

Codice: Seleziona tutto

#!/bin/bash

URL='http://www.sito.it'
PAROLA='/link_'
n_ris=10
n_link=1
n_file=1
wget -nd -nv -rl1 --spider "$URL" 2>&1 | tee non_filtrato.txt | grep -Po --line-buffered "URL:\s?\K(.*$PAROLA.*?)\s+" | while read link
do
	echo "$link" >> rid_$n_file.txt
(( n_link++ ))

if [ $n_link -gt $n_ris ]; then 
	(( n_file++ ))
	n_link=1
fi
done
Questo crea i file volta per volta... altrimenti si può usare la funzione di crap...
split normale non funge ugualmente come previsto da Crap, nemmeno usando -u.
Quindi o si usa l'ultimo script o la funzione di Crap al posto del ciclo while.
Ultima modifica di UbuNuovo il mercoledì 15 luglio 2015, 12:34, modificato 1 volta in totale.
Salva l'Ucraina! 🇺🇦
gennysa
Prode Principiante
Messaggi: 89
Iscrizione: giovedì 9 luglio 2015, 21:45
Distribuzione: Ubuntu 18.04 LTS
Sesso: Maschile

Re: Wget per url da pagina web

Messaggio da gennysa »

Così mi crea sempre un solo file alla fine...

edit:
e tutti i risultati sempre in un solo file.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Wget per url da pagina web

Messaggio da UbuNuovo »

Prova rifare la copia dal mio post precedente, l'ho ripostato forse c'era qualche errorre di copia-incolla
Salva l'Ucraina! 🇺🇦
gennysa
Prode Principiante
Messaggi: 89
Iscrizione: giovedì 9 luglio 2015, 21:45
Distribuzione: Ubuntu 18.04 LTS
Sesso: Maschile

Re: Wget per url da pagina web

Messaggio da gennysa »

per ogni riga che legge
n_link++: not found
ed alla fine crea il file unico
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Wget per url da pagina web

Messaggio da UbuNuovo »

Dopo il copia incolla guarda che non rimangano spazi prima di '#!/bin/bash'
é il forum che aggiunge un tab
Seleziona tutto (Ctrl+a) e premi Shift+Tab.
Salva l'Ucraina! 🇺🇦
gennysa
Prode Principiante
Messaggi: 89
Iscrizione: giovedì 9 luglio 2015, 21:45
Distribuzione: Ubuntu 18.04 LTS
Sesso: Maschile

Re: Wget per url da pagina web

Messaggio da gennysa »

Allora,
con la $parola link_ (quindi parola che trova nei link)
11: prova2.sh: n_link++: not found
se come $parola metto eiuefb (qundi non trova)
non mi da l'errore
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Wget per url da pagina web

Messaggio da UbuNuovo »

hai provato a levare gli spazi aggiunti dal forum?
Quel tipo di incremento è specifico di bash, se non viene riconosciuto l'interprete, non funge.
Altrimenti prova a cambiare gli incrementi con let
Salva l'Ucraina! 🇺🇦
gennysa
Prode Principiante
Messaggi: 89
Iscrizione: giovedì 9 luglio 2015, 21:45
Distribuzione: Ubuntu 18.04 LTS
Sesso: Maschile

Re: Wget per url da pagina web

Messaggio da gennysa »

let: not found
gli spazi li ho tolti..
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4444
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Wget per url da pagina web

Messaggio da UbuNuovo »

hai sostituito

Codice: Seleziona tutto

(( n_link++ ))
con

Codice: Seleziona tutto

let n_link+=1
e

Codice: Seleziona tutto

(( n_file++ ))
con

Codice: Seleziona tutto

let n_file+=1
?
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 8 ospiti