Massenaufnahme eines Teils des HTML-Quellcodes mithilfe von Shell-Skripts

391
NoName

Von dieser Seite, eine Radiosendung http://www.ellinofreneianet.gr/sounds.php?s=0&p=10&o=l Ich möchte alle aufgezeichneten Shows herunterladen.

Sie sind alle diese Art von Seiten http://www.ellinofreneianet.gr/sound.php?id=7101
und ich möchte von all diesen siebentausend Seiten die Zeile 422 des Quellcodes entnehmen, in der sich der Download-Link befindet.
Dies kann erreicht werden, indem auch kein Zeilengriff genommen wird. Der reguläre Ausdruck ". = Podcast /. " Funktioniert ebenfalls.

Wie kann man die Zeile 422 von jeder Seite dieses Typs abrufen oder den Teil "= podcast / ****. Mp3" mithilfe von Shell-Skripts / Befehlen abrufen?

0
Was ist also die Frage? hayavuk vor 9 Jahren 2
Ich habe es zum besseren Verständnis editiert NoName vor 9 Jahren 0

1 Antwort auf die Frage

0
Volker Siegel

Etwas wie das?

for i in ; do wget -q -O - http://www.ellinofreneianet.gr/sound.php\?id\=$i | grep ".=podcast/." ; done 

Die wgetOptionen sind -qleise, zeigen keinen Fortschritt usw. und -O -schreiben die Ausgabe in stdout.

Nicht jede Seite hat einen MP3-Link. Einige zeigen sogar eine Seite, die die 404-Fehlerseite sein kann. Die Seiten ab 0 scheinen ebenfalls leer zu sein.

Die leeren Seiten haben URLs, die in enden podcast/", so dass wir sie mit übereinstimmenden Zeichenfolgen ausschließen können, die keine enthalten ":

... | grep ".=podcast/[^\"]" 

Um nur die .mp3URLs zu erhalten, verwenden Sie

... | grep -o 'bitsnbytesplayer.php.*\.mp3' 

Sie haben selbst herausgefunden, wie Sie die Seiten-URL vor jeder MP3-URL ausgeben. Hier ist eine optimierte Variante davon, die nur eine HTTP-Anfrage pro Seite verwendet:

for i in ; do \ wget -q -O - http://www.ellinofreneianet.gr/sound.php\?id\=$i | \ grep -o 'bitsnbytesplayer.php.*\.mp3' && \ echo http://www.ellinofreneianet.gr/sound.php\?id\=$i ; done | sed -n 'h;n;p;g;p' 

Der && echo ...druckt die URL, wenn der grep zuvor eine MP3-URL gefunden hat. Der sedBefehl ändert die Reihenfolge der Linienpaare.

Ich erhalte "Syntaxfehler in der Nähe des unerwarteten Tokens" wget "" Entschuldigung, aber ich habe keine Erfahrung mit Linux. NoName vor 9 Jahren 0
Oh, Entschuldigung, meine Schuld, ich verwende 'zsh', wahrscheinlich verwende ich 'bash' - ich werde es ändern. Volker Siegel vor 9 Jahren 0
Ist es im zweiten Fall möglich, auch die URL zu drucken? ZB `http://www.ellinofreneianet.gr/sound.php?id=7101 bitsnbytesplayer.php? w = 728 & h = 30 & s = 1 & f = Podcast / 209TRITi.mp3` NoName vor 9 Jahren 0
Was ist der zweite Fall? Funktioniert die letzte Zeile nicht? Volker Siegel vor 9 Jahren 0
Mit dem zweiten Fall meine ich "Um nur die .mp3-URLs zu erhalten, verwenden Sie". Es funktioniert, aber ich möchte, dass es sich um eine Zeile handelt, aus der der MP3-Link abgerufen wurde, und die zweite Zeile sollte der MP3-Link sein. NoName vor 9 Jahren 0
Ich habe herausgefunden, wie es geht, `für i in ; tun Sie wget -q -O - http://www.ellinofreneianet.gr/sound.php\?id\=$i | grep -o -q 'bitsnbytesplayer.php. * \. mp3' && echo http://www.ellinofreneianet.gr/sound.php\?id\=$i; wget -q -O - http://www.ellinofreneianet.gr/sound.php\?id\=$i | grep -o 'bitsnbytesplayer.php. * \. mp3'; Vielen Dank für die Antwort, mein Freund. NoName vor 9 Jahren 0
Nett! Es könnte vereinfacht werden auf `for i in ; tun Sie wget -q -O - http://www.ellinofreneianet.gr/sound.php\?id\=$i | grep -o 'bitsnbytesplayer.php. * \. mp3' && echo http://www.ellinofreneianet.gr/sound.php\?id\=$i; done`, wenn Sie akzeptieren können, dass die MP3-URL an erster Stelle steht. Volker Siegel vor 9 Jahren 0
Ha, wir können die Zeilen zurückschalten, so dass der MP3-Player wieder an zweiter Stelle kommt. Allerdings sparen wir damit 7000 HTTP-Anfragen. :) Ich werde zur Antwort beitragen. Volker Siegel vor 9 Jahren 0