我正在尝试制作一个bash脚本,该脚本将下载youtube页面,查看最新视频并找到其url。我有下载页面的部分,除了我不知道如何用url隔离文本。我有这个下载页面
curl -s https://www.youtube.com/user/h3h3Productions/videos > YoutubePage.txt
它将把它保存到一个文件中。但我不知道如何隔离div的单个部分。div是
<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&feature=c4-videos-u&ved=CD4QvxsiEwicpteI1I3NAhXT5H4KHQPGCqEomxw" href="/watch?v=q6TNODqcHWA">Why I'm Unlisting the Leafyishere Rant</a>
最后我需要隔离href,但我不知道如何使用grep或sed来实现这一点。
使用sed:
sed -n 's/<a [^>]*>/n&/g;s/.*<a.*href="([^"]*)".*/1/p' YoutubePage.txt
仅提取视频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
...
省略重复行:
$ 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
...
您也可以通过管道将其发送到curl
命令:
curl -s https://www.youtube.com/user/h3h3Productions/videos | sed -n 's/<a [^>]*>/n&/g;s/.*<a.*href="(/watch?[^"]*)".*/1/p' | sort | uniq
您可以使用lynx
,这是一个终端浏览器,但有一个-dump
模式,它将输出HTML解析的文本,并提取URL。这样可以更容易地对URL:进行grep
lynx -dump 'https://www.youtube.com/user/h3h3Productions/videos'
| sed -n '//watch?/s/^ *[0-9]*. *//p'
这将输出类似于:
https://www.youtube.com/watch?v=EBbLPnQ-CEw
https://www.youtube.com/watch?v=2QOx7vmjV2E
...
细分:
-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.
'