Почему бы не использовать Wget? Цитирование со страницы:
GNU Wget - это бесплатный программный пакет для извлечения файлов с использованием HTTP, HTTPS и FTP, наиболее широко используемых интернет-протоколов. Это неинтерактивный инструмент командной строки, поэтому его легко вызывать из сценариев, заданий cron, терминалов без поддержки X-Windows и т.д.
GNU Wget обладает множеством функций, облегчающих получение больших файлов или зеркалирование всего веб- или FTP-сайтов, в том числе:
- Может возобновить прерванные загрузки, используя REST и RANGE
- Может использовать шаблоны имени файла и рекурсивно отражать каталоги
- Файлы сообщений на основе NLS для разных языков
- При желании преобразует абсолютные ссылки в загруженных документах в относительные, так что загруженные документы могут ссылаться друг на друга локально
- Работает в большинстве UNIX-подобных операционных систем, а также в Microsoft Windows
- Поддерживает HTTP прокси
- Поддерживает HTTP куки
- Поддерживает постоянные соединения HTTP
- Автоматическая / фоновая операция
- Использует локальные временные метки файлов, чтобы определить, нужно ли повторно загружать документы при зеркалировании.
- GNU Wget распространяется под лицензией GNU General Public License.
Я лично использовал его для хранения нескольких сайтов для просмотра oflline. У него небольшая крутая кривая обучения (из-за аргументов и тому подобного), но у него есть возможность делать все, что вы хотите.
Существует также порт Wget для Windows, если у вас нет UNIX-машины.
Возможные аргументы, которые я бы использовал для вашей задачи, были бы примерно такими:
wget -r -p -k -np -w 1 http://developer.android.com/reference/
Объясняя команды:
-r
- устанавливает рекурсивный поиск (т.е. он получит любую ссылку, существующую на этой странице и т. д.)
-p
- загружает все необходимое для правильного просмотра страницы
-k
- преобразует ссылки в документах, чтобы сделать их пригодными для локального просмотра
-np
- никогда не подниматься в родительский каталог при рекурсивном извлечении (т.е. не возвращаться)
-w 1
- ждет 1 секунду между каждым поиском. Это полезно для того, чтобы не перегружать сервер запросами, которые могут вызвать ошибки 404 и другие вещи.
Использование аргумента взято из руководства. Я не запускал это, поэтому я не могу точно сказать, что он будет сканироваться соответствующим образом, но с некоторыми корректировками это поможет.