Итак. Мне понадобилось как-то скачать все медиафайлы со стены определенной группы. Так как записей в группе порядка 50.000, я начал думать над созданием скрипта, который “вытянет” для меня все, что нужно. Для примера мы будем парсить вымышленную группу http://vk.com/supergroup007. Скачать нам нужно картинки в формате jpeg.
Если мы зайдем в группу и нажмем на первую запись, у нас откроется ссылка вида http://vk.com/supergroup007/?w=wall-48572095_123454
Что я сделал в скрипте. Он перебирает ссылки (по убыванию) по маске http://vk.com/supergroup007/?w=wall-48572095_XXXXXX. Потом с помощью curl смотрит в страницу, находит ссылку на документ, сохраняет в файл vk.tmp, потом опять же curl’ом находит ссылку на файл и скачивает его через wget. Сохраняет последнюю позицию в файл COUNTER. Файлы сохраняются в текущую папку. Вот так. Сам BASH скрипт:
#!/bin/bash
# Начинаем с последней страницы
COUNTER=123454
# И заканчиваем указанной страницей
until [ $COUNTER -lt 100000 ]; do
curl -L http://vk.com/supergroup007/?w=wall-48572095_$COUNTER | grep doc | grep http | sed 's|.*href="||' | sed -r 's/" target.+//' > vk.tmp
link1=`cat vk.tmp`
fulllink1="https://vk.com"$link1
curl $fulllink1 | grep -oE '\b(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]*[-A-Za-z0-9+&@#/%=~_|]' | grep jpeg? | awk -F "?" '{print $1}' | head -1 | xargs -P 5 wget {}
echo $COUNTER > COUNTER
let COUNTER-=1
done