LINUX.ORG.RU
решено ФорумTalks

хочу скачать!


0

2

Есть сайт http://www.example.org, на нём директории с музыкой. Структура примерно такая - http://example.org/sound/Artist/ и на уровне sound в html вот такая вот штука:

<!--
 function redirect()
 { 
  window.location = "http://www.anotherexample.org/"
 }
 
 setTimeout("redirect();", 1000)
//-->

Приходится качать из папки /Artist/, качаю так

wget -A '*.mp3' -r -np -e robots=off http://example.org/sound/Artist/

но исполнителей там немало и приходится смотреть через anotherexample путь к файлам и вбивать руками в wget каждый раз. Как бы это сделать грамотно?


Ответ на: комментарий от Ramen

Как я получу линки если там идёт редирект? И перл не знаю, хотелось бы более-менее стандартными средствами это сделать.

hdclnr
() автор топика
Ответ на: комментарий от hdclnr

Ну тогда иди полуркай man к wget на тему рекурсивной загрузки.

Ramen ★★★★
()
Ответ на: комментарий от hdclnr

curl + sed всё это может распарсить в любом случае в список полезных делу линков.

NekoExMachina
()

Добрый день! В эфире передача утренние толксы, где мы научим вас готовить wget/curl!

Сегодня мы будем рипать музыкальный сайт.

Помните, wget/curl имеют множество опций, но как истинные Ъ мы будем использовать их по минимуму, делая всю работу руками и оставляя себе полный контроль над происходящим. Мы научимся ювелирной точности при закачке контента!

Итак, для начала сделаем:

wget "http://www.ubu.com/sound/"

Посмотрим на скачанное:

cat index.html

Теперь нарежем увиденное мелкой соломкой и процедим через фильтр ссылок:

cat index.html | tr «<> » «\n\n\n» | grep href

Получилось красиво, не правда ли?

Теперь немного почистим урлы, убирая относительные пути и еще разик отфильтруем:

cat index.html | tr «<> » «\n\n\n» | grep href | sed «s/=\».\//=\«/g; s/=\»..\//=\«\//g; s/=\»\\([^\/]\)/=\\\«\/sound\/\1/g» | grep html

Наше блюдо практически готово, осталось обрезать кожуру из тегов, еще раз перебрать и можно сохранять в файл:

cat index.html | tr «<> » «\n\n\n» | grep href | sed «s/=\».\//=\«/g; s/=\»..\//=\«\//g; s/=\»\\([^\/]\)/=\\\«\/sound\/\1/g» | grep html | cut -d\" -f2 | sort -u > links

В появившемся файле находятся все нужные нам ссылки, давайте скачаем их! По традиции высокоскоростных рипперов, будем делать это в 20 потоков, надеясь не получить автобан от высокой нагрузки:

cat links | xargs -n1 -P20 -i{} curl -s http://www.ubu.com{} > content

Теперь в файле content лежит все наше добро:

stat content
File: `content'
Size: 4132443 Blocks: 8088 IO Block: 4096 обычный файл

Мы сриповали целых 4 метра! Да еще в 20 потоков! Другим прыщекачалкам такое и не снилось! Оставайтесь с нами и вы узнаете больше!

Сразу нарежем наш контент мелкой соломкой:

tr \" «\n» <content

Затем отфильтруем только нужное:

tr \" «\n» <content| grep ".mp3"

Этот метод замечательно работает для воровства музыки, но как быть с другими медиафайлами? А никак, они нам нахрен не нужны! Давайте переберем дубли, а результат перельем в файл:

tr \" «\n» <content| grep ".mp3" | sort -u > КАЧАТ.txt

Подавать на толстом канале, добавить юзерагент и рефереры по вкусу:

wget -i КАЧАТ.txt

Приятного риппинга!

simple_best_world_web_master
()
Ответ на: комментарий от simple_best_world_web_master

Спасибо за подробный how-to! Всё работает отлично до фильтрации нужного - в файл КАЧАТ.txt. Остаются всевозможные html-вские <br>, <a> и т.д. и при wget -r -i КАЧАТ.txt на часть ссылок выдаёт

КАЧАТ.txt: Неверный URL >mp3</a>, <a href=: Scheme missing

Хотя, можно и через tl -d почистить ненужное, наверное.

hdclnr
() автор топика
Ответ на: комментарий от simple_best_world_web_master

Я в этом еще не разбирался, так что не смогу правильно написать статью. Да и времени сейчас на изучение curl/wget нет.

Zodd ★★★★★
()
Ответ на: комментарий от Zodd

Is not so fun.

Ну а что ты хочешь сделать? Изучать курл/баш тут надо на уровне ввода урла, остальное - это использование coreutils. Фактически это обычное написание парсеров/грабберов, пара таких строчек на баше стоит 30 баксов в среднем. Зачем мне лишать себя заработка? Лулзов и то не получил, ради чего и писал. Is not so fun. А новички из вики все равно нифига не поймут, будет еще одно «заклинание копипастом», сути которого мало кто поймет. А кто поймет - ему статья и не нужна.

simple_best_world_web_master
()
Ответ на: комментарий от gunja

отлично писано. зажигает

+1. Да и ждем уже тулкит.

Zodd ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.