2016-06-04 12 views
0

extrahieren Ich versuche, ein Bash-Skript, das eine YouTube-Seite herunterladen wird, finden Sie im neuesten Video und finden Sie die URL. Ich habe den Teil, um die Seite herunterzuladen, außer ich kann nicht herausfinden, wie man den Text mit der URL isoliert. Ich habe dies die SeiteIch kann nicht herausfinden, wie man eine Zeichenfolge in bash

curl -s https://www.youtube.com/user/h3h3Productions/videos > YoutubePage.txt 

herunterladen, die sie in einer Datei speichern werden. Aber ich kann nicht herausfinden, wie man den einzelnen Teil eines div isoliert. Die div ist

<a class="yt-uix-sessionlink yt-uix-tile-link spf-link yt-ui-ellipsis yt-ui-ellipsis-2" dir="ltr" title="Why I'm Unlisting the Leafyishere Rant" aria-describedby="description-id-877692" data-sessionlink="ei=a2lSV9zEI9PJ-wODjKuICg&amp;feature=c4-videos-u&amp;ved=CD4QvxsiEwicpteI1I3NAhXT5H4KHQPGCqEomxw" href="/watch?v=q6TNODqcHWA">Why I'm Unlisting the Leafyishere Rant</a> 

Und ich brauche das href am Ende zu isolieren, aber ich kann nicht herausfinden, wie dies mit grep zu tun oder sed.

+0

[Bearbeiten] Ihre Frage die Abtastwerteingang aufzunehmen, die produzieren würde diese Ausgabe ('Das div is'). Um Karate Kid 3 zu paraphrasieren: "Ein Mann kann nicht sehen, er kann nicht parsen". –

Antwort

0

Mit sed:

sed -n 's/<a [^>]*>/\n&/g;s/.*<a.*href="\([^"]*\)".*/\1/p' YoutubePage.txt 

Um nur das Video zu extrahieren ahref:

$ sed -n 's/<a [^>]*>/\n&/g;s/.*<a.*href="\(\/watch\?[^"]*\)".*/\1/p' YoutubePage.txt 
/watch?v=q6TNODqcHWA 
/watch?v=q6TNODqcHWA 
/watch?v=ix4mTekl3MM 
/watch?v=ix4mTekl3MM 
/watch?v=fEGVOysbC8w 
/watch?v=fEGVOysbC8w 
... 

wiederholten Zeilen auslassen:

$ sed -n 's/<a [^>]*>/\n&/g;s/.*<a.*href="\(\/watch\?[^"]*\)".*/\1/p' YoutubePage.txt | sort | uniq 
/watch?v=2QOx7vmjV2E 
/watch?v=4UNLhoePqqQ 
/watch?v=5IoTGVeqwjw 
/watch?v=8qwxYaZhUGA 
/watch?v=AemSBOsfhc0 
/watch?v=CrKkjXMYFzs 
... 

Sie können auch eine Pipe an Ihren curl Befehl ein:

curl -s https://www.youtube.com/user/h3h3Productions/videos | sed -n 's/<a [^>]*>/\n&/g;s/.*<a.*href="\(\/watch\?[^"]*\)".*/\1/p' | sort | uniq 
0

Sie können lynx verwenden, das ein Terminal-Browser ist, aber einen -dump Modus haben, der einen HTML-geparsten Text mit extrahierter URL ausgibt. Dies erleichtert es, die URL grep:

lynx -dump 'https://www.youtube.com/user/h3h3Productions/videos' \ 
    | sed -n '/\/watch?/s/^ *[0-9]*\. *//p' 

Dies wird Ausgang so etwas wie:

https://www.youtube.com/watch?v=EBbLPnQ-CEw 
https://www.youtube.com/watch?v=2QOx7vmjV2E 
... 

Aufteilung:

-n '        # Disable auto printing 
    /\/watch?/     # Match lines with /watch? 
       s/^ *[0-9]*\. *// # Remove leading index: " 123. https://..." -> 
           # "https://..." 
           p # Print line if all the above have not failed. 
           ' 
Verwandte Themen