С этой страницы радиопередачи http://www.ellinofreneianet.gr/sounds.php?s=0&p=10&o=l Я хочу загрузить все записанные передачи.

Это все страницы такого типа http://www.ellinofreneianet.gr/sound.php?id=7101
и я хочу извлечь из всех этих 7 тысяч страниц строку 422 исходного кода, где находится ссылка для скачивания.
Этого также можно добиться, не захватывая строки, также работает регулярное выражение ". = Podcast /. ".

Как получить строку 422 каждой страницы этого типа ИЛИ получить часть "= podcast/****. Mp3", используя сценарии /команды оболочки?

1 ответ1

0

Что-то вроде этого?

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

Опции wget : -q quiet, показать отсутствие прогресса и т.д., И -O - записать вывод в стандартный вывод.

Не на каждой странице есть ссылка на mp3; Некоторые даже показывают страницу, которая может быть страницей с ошибкой 404. Страницы, начинающиеся с 0, также кажутся пустыми.

Пустые страницы имеют URL-адреса, оканчивающиеся на podcast/" , поэтому мы можем исключить их с помощью соответствующих строк, у которых нет " там:

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

Чтобы получить только .mp3 URL, используйте

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

Вы сами узнали, как выводить URL страницы перед каждым mp3-адресом. Вот вариант оптимизации, использующий только один 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 ... печатает URL-адрес, если grep ранее нашел URL-адрес mp3. Команда sed переключает порядок пар линий.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .