使用 shell 脚本批量抓取部分 HTML 源代码

使用 shell 脚本批量抓取部分 HTML 源代码

从此页面开始,广播节目 http://www.ellinofreneianet.gr/sounds.php?s=0&p=10&o=l 我想下载所有录制的节目。

它们都是这种类型的页面http://www.ellinofreneianet.gr/sound.php?id=7101
并且我想从这 7 千页中抓取下载链接所在的源代码第 422 行。
也可以通过不抓取行来实现,正则表达式“。=播客/。“ 也有效。

如何使用 shell 脚本/命令抓取该类型的每个页面的第 422 行或获取“=podcast/****.mp3”部分?

答案1

像这样吗?

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

选项wget包括-q安静、不显示进度等,并将-O -输出写入标准输出。

并非每个页面都有 mp3 链接;有些甚至显示可能是 404 错误页面。从 0 开始的页面也看起来是空的。

空页面的 URL 以 结尾podcast/",因此我们可以使用不带 的匹配字符串将其排除"

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

要仅获取.mp3URL,请使用

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

您自己发现了如何在每个 mp3 URL 之前输出页面 URL。以下是它的一个 optimiset 变体,每个页面仅使用一个 HTTP 请求:

for i in {7100..7200} ; 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'

&& echo ...如果之前的 grep 找到 mp3 url,则打印 URL。该命令sed会切换行对的顺序。

相关内容