Недавно у меня стала задача — выкачать оффлайн копию сайта. Пишут, что wget вроде как умеет рекурсивно скачивать. Я попробовал такие варианты:
wget -r --no-parent http://www.website.com wget --mirror -p --html-extension --convert-links http://www.website.com
Но результат оказался неудовлетворительным — многих страниц не хватало.
Затем попробовал Httrack. Результат в общем хороший, особенно порадовала возможность докачки изменений, без повторного скачивания всего сайта. Однако несколько страниц скачались пустыми. Кроме того скачивалось достаточно много мусора (RSS фиды, варианты index.html, статистика внутри html). В итоге я написал bash скрипт, который докачивает пустые страницы, а также вычищает мусор, сокращая размер с 1100 Мб до 220 Мб, и пакует результат в ISO.
#!/bin/bash source_path=/media/d2/Temp/HTTrack project_name=doctorberezovska_com temp_path=/media/d1/Temp iso_path=/media/d1/Stasia/offline-websites url_prefix=http:/ pagename=index.html basepath=$temp_path/$project_name cp -r $source_path/$project_name $temp_path rm -rf $basepath/hts-cache #delete all folders "feed" find $basepath -type d -name feed -exec rm -r {} \; #delete all files index????.html find $basepath -type f -name index????.html -exec rm -r {} \; find $basepath -type f -name index.html -size 0c > empty_indexes.txt #download empty index.html files while read -ru 3 LINE; do #replace basepath with http prefix in each line urlpath=${LINE/$basepath/$url_prefix} #delete index.html in each line urlpath=${urlpath/$pagename} wget --output-document="$LINE" $urlpath done 3< empty_indexes.txt find $basepath -type f -name *.html > all_html.txt while read -ru 3 LINE; do #Replace http://doctorberezovska.com/ with ../ #Some links are not replaced by HTTrack. This replacement will only work for level 1 pages, but they are the majority. A universal replacement is too complicated. #Also delete trash after </html> sed -i 's_http://doctorberezovska.com/_../_g;/<\/html>/q' $LINE done 3< all_html.txt mkisofs -r -iso-level 4 -o $iso_path/$project_name"_"$(date +%Y-%m-%d).iso $basepath rm -rf $basepath
Этот скрипт, а также множество других полезных настроек для Linux, опубликованы в этой записи.