Парсинг сайтов из командной строки

Порой, бывает очень нужно быстро скачать с сайта десятки картинок, или документов. Можно это делать вручную, но это очень и очень долго. А главное — нудно. Раньше был еще DownloadMaster, но уж больно давно это было. Да и искать аналоги под Ubuntu мне, честно говоря, было лень. К тому же простой парсинг сайтов не требует каких-то мудреных действий. Все что нам нужно — это базовые знания о html и регулярных выражениях. Инструментом может быть терминал в Linux/Windows или php-редактор в виде блокнота. (С php будет слегка потяжелее, и программа будет занимать вместо 2-3 строк все 16-20)

Итак, за 15 минут у меня была вот эта чудесная запись:

wget -qO — http://www.site.ru/glavnay-stranica-saita | grep -ioe ‘http://site.ru/images.*.jpg’ | wget -qi — -P Загрузки/Site/

Выглядит страшно но на самом деле тут ничего сложного. Давайте разберемся в писанине:

wget — это команда для скачивания чего-либо. Страницы сайта, документа, изображения, архива. Вот мы и пишем вначале: 

wget http://www.site.ru/glavnay-stranica-saita

Если мы напишем wget ya.ru, то ответ будет таким:

—2014-06-04 15:46:35 —  http://ya.ru/
Resolving ya.ru (ya.ru) … 213.180.204.3, 93.158.134.3, 213.180.193.3,…
Connecting to ya.ru (ya.ru)|213.180.204.3|:80 … connected. HTTP request sent, awaiting response… 200 Ok
Length: 8222 (8,0K)
Saving to: ‘index.html’
100%[======================================>] 8 222       —.-K/s   in 0,001s  
2014-06-04 15:46:35 (9,99 MB/s) — ‘index.html’ saved [8222/8222]

«Что это было?»,- вы спросите. Ничего особенного, просто сохранили к себе страничку ya.ru. Можете даже открыть и посмотреть. Да-да, там самый обычный html файлик, который можно открыть и в браузере, и в блокноте, и в редакторе. Да в чем удобно. Все те же, img, p, div и т.п. А раз есть эти «якоря» в виде особых слов, значит и разобрать файл можно на составляющие. Для этого нам нужны регулярные выражения. Удобнейшая вещь, надо сказать. Это такой шаблон, по которому мы будем искать. Более подробно о них можно почитать в той же википедии или в моем кратком изложении.

Мое выражение весьма простое: ‘http://site.ru/images.*.jpg’ В переводе на русский оно означает: «найти строку начинающуюся с ‘images’, а затем нечто, заканчивающееся ‘.jpg'». А если на примере, то будут найдены:

http://site.ru/images/1.jpg
http://site.ru/images/img/1.jpg
http://site.ru/images/1687_kdv.jpg
http://site.ru/images/full/path/to/img/1.jpg
http://site.ru/images-to-vasya/vasya.jpg

Таким образом будут найдены все пути к JPG изображениям на странице. А имея полный путь к изображению мы всегда его можем скачать. Тем же wget. Остальные буквы означают не что иное, как указания этим командам:

-q — указывает wget не выводить информацию о своей работе, т.е. вы не увидите такого ответа как в примере ya.ru

-O — заставляет выводить загруженную страничку не в файл, а передать ее grep.

-i — для grep, регистронезависимый поиск,

-o — указывает grep выбирать только совпавшую часть подстроки,

-e — поиск по регулярному выражению

-i — указание второму wget получить список файлов из результатов grep

-P ~/куда/копировать — указание нашей папки куда будет произведена загрузка файлов.

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