Скачивание оффлайн копии сайта

Недавно у меня стала задача — выкачать оффлайн копию сайта. Пишут, что 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, опубликованы в этой записи.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *