Доброго времени суток!
Я читаю habrahabr.ru уже давно, однако «шустрый» инет есть на работе, а вот дома больше времени идет на загрузку статей чем на чтение… Поскольку ноутбук на работе подключить есть куда было принято решение скачать статьи из захабренных и песочницы. Как сделать это в 3 консольные команды под катом
Итак ссылка на статью на захабренные статьи имеет вид:
habrahabr.ru/post/[номер статьи]/
в песочнице
habrahabr.ru/sandbox/[номер статьи]/
Смотрим сколько статей есть на хабре и в песочнице вводя указанный выше адрес. На момент написания статьи захабрено 147858 статей в песочнице 46231 статей (обратите внимание в песочнице далеко не все статьи доступны!).
Для скачивания мой любимый инструмент wget, команды man wget и ubuntu.ru подсказывают, что для скачивания странички нужно запускать: wget -c -p [адрес].
Ключ "-c" дает возможность автоматически продолжить прерванную закачку, а "-p" загрузит заодно и подвязку к странице (все изображения, таблицы стилей и т.п.). Используя возможности командной строки и изучив справку wget вопрос с загрузкой можно решить 2 путями:
Тут надо добавить, что автоматизировать процесс ввода диапазона 1-n можно при помощи команды seq
Вариант1.1
В папке вводим последовательно команды в консоль
for np in `seq 1 147858`; do echo "wget -c -p http://habrahabr.ru/post/$np/" >> dload; done
for np in `seq 1 46231`; do echo "wget -c -p http://habrahabr.ru/sandbox/$np/" >> dload; done
bash ./dload
Вариант 1.2
for np in `seq 1 147858`; do echo "http://habrahabr.ru/post/$np/" >> dload; done
for np in `seq 1 46231`; do echo "http://habrahabr.ru/sandbox/$np/" >> dload; done
wget -c -p -i dload
Совпадающие файлы не будут повторно закачены. Копия сайта ляжет в habrahabr.ru
Если нужно сделать ссылки на хабр локальными, добавляем ключ "-k" (ссылки будут обновляться последовательно т.е. из 100 поста на 50 будут, а вот из 50 на сотый — нет):
for np in `seq 1 147858`; do echo "wget -c -p -k http://habrahabr.ru/post/$np/" >> dload; done
for np in `seq 1 46231`; do echo "wget -c -p -k http://habrahabr.ru/sandbox/$np/" >> dload; done
bash ./dload
Вариант 1.2
for np in `seq 1 147858`; do echo "http://habrahabr.ru/post/$np/" >> dload; done
for np in `seq 1 46231`; do echo "http://habrahabr.ru/sandbox/$np/" >> dload; done
wget -c -p -i -k dload
Это все можно внести в bash-скрипт
#!/bin/bash
for np in `seq 1 147858`; do echo "http://habrahabr.ru/post/$np/" >> dload; done
for np in `seq 1 46231`; do echo "http://habrahabr.ru/sandbox/$np/" >> dload; done
wget -c -p -i -k dload
Для скачивания произвольного диапазона
#!/bin/bash
for np in `seq $1 $2`; do echo "http://habrahabr.ru/post/$np/" >> dload; done
for np in `seq $3 $4`; do echo "http://habrahabr.ru/sandbox/$np/" >> dload; done
wget -c -p -i -k dload
при этом в скрипт нужно передать 4 значения:
1. Начало интервала захабренные
2. Конец интервала захабренные (значение больше чем в п. 1)
3. Начало интервала песочница
4. Конец интервала песочница (значение больше чем в п. 3)
Надеюсь полезно. Удачи!
Автор: astrobeglec