Каж­дый из нас стал­кивал­ся с таким: находишь инте­рес­ный сайт, добав­ляешь адрес в «Избран­ное», собира­ясь как сле­дует изу­чить его поз­же, а спус­тя какое‑то вре­мя воз­вра­щаешь­ся и видишь на экра­не ошиб­ку 404. Мож­но поис­кать без­вре­мен­но почив­ший кон­тент в кеше поис­ковых сис­тем или в широко извес­тном «ин­тернет‑архи­ве». Но туда выг­ружа­ется далеко не все содер­жимое сай­та: мно­гие изоб­ражения, скрип­ты и виде­оро­лики навер­няка ока­жут­ся недос­тупны. Что­бы избе­жать подоб­ных неп­рият­ностей, сущес­тву­ет бес­плат­ный инс­тру­мент ArchiveBox, о котором мы сегод­ня и погово­рим.

Нес­мотря на то что «ин­тернет‑архив» по пра­ву счи­тает­ся одним из самых популяр­ных инс­тру­мен­тов поис­ка «потерян­ных» и уда­лен­ных веб‑стра­ниц, он име­ет ряд серь­езных огра­ниче­ний.

  • Во‑пер­вых, он не индекси­рует стра­ницы в Facebook, «ВКон­такте» и дру­гих соц­сетях.
  • Во‑вто­рых, в веб‑архив попада­ют далеко не все раз­делы сай­та.
  • В‑треть­их, туда не добав­ляют­ся ресур­сы и их раз­делы, зак­рытые от индекса­ции соот­ветс­тву­ющей инс­трук­цией в фай­ле robots.txt.
  • В‑чет­вертых, в архив точ­но не попадут пред­назна­чен­ные для ска­чива­ния фай­лы, видео- и ауди­оро­лики и про­чие подоб­ные эле­мен­ты.
  • На­конец, если отоб­ража­емый кон­тент сай­та динами­чес­ки соз­дает­ся с помощью JavaScript или дру­гих подоб­ных инс­тру­мен­тов, при сох­ранении он может час­тично утра­тить­ся или «поломать­ся» — в резуль­тате копия веб‑стра­ницы будет выг­лядеть сов­сем не так, как ори­гинал. То же самое, кста­ти, каса­ется веб‑стра­ниц, сох­раня­емых из интерне­та на локаль­ной машине стан­дар­тны­ми средс­тва­ми бра­узе­ра.

Нап­рашива­ется вывод: нужен аль­тер­натив­ный инс­тру­мент, который поз­волит соз­давать копию выб­ранных сай­тов, при­чем смо­жет делать это быс­тро, качес­твен­но и надеж­но.

Имен­но для это­го и был соз­дан ArchiveBox. Он поз­воля­ет сох­ранить авто­ном­ный дуб­ликат любого сай­та и выг­рузить в архив все его содер­жимое. Целевые веб‑ресур­сы мож­но задать по спис­ку URL либо взять из зак­ладок или исто­рии бра­узе­ра. Сай­ты будут выг­ружены вне зависи­мос­ти от нас­тро­ек robots.txt, зап­реща­ющих индекса­цию. Вмес­те с веб‑стра­ница­ми сох­раня­ются кар­тинки, встро­енные видео, эле­мен­ты JavaScript и про­чее полез­ное содер­жимое.

По­луча­ется эда­кий пер­сональ­ный «архив интерне­та», которым рас­поряжа­ешь­ся и управля­ешь ты сам. Инс­тру­мент может быть полезен как в качес­тве аль­тер­нативы ска­чива­нию веб‑стра­ничек на собс­твен­ный компь­ютер, так и для иссле­дова­ния заин­тересо­вав­шего тебя сай­та — в архивной копии мож­но копать­ся сколь­ко душе угод­но, не опа­саясь неожи­дан­ностей.

info

Пол­ный текст этой статьи дос­тупен без под­писки бла­года­ря спон­сору — ком­пании RUVDS, одно­му из самых передо­вых хос­тинг‑про­вай­деров VPS/VDS-сер­веров. RUVDS пред­лага­ет вир­туаль­ные сер­веры в десяти дата‑цен­трах уров­ня Tier 3 и выше по все­му миру, низ­кие цены от 30 руб­лей в месяц, удоб­ный мар­кет­плейс и уста­нов­ку популяр­ных обра­зов в один клик.

 

Установка

Дви­жок ArchiveBox написан на Python, исполь­зует в сво­ей работе Wget и curl и рас­счи­тан на работу в сре­де Linux и macOS, где для него име­ются все необ­ходимые ком­понен­ты. Для запус­ка ArchiveBox в Windows мож­но исполь­зовать Docker — под­робная инс­трук­ция по раз­верты­ванию обра­за есть на GitHub про­екта. Мы же будем нас­тра­ивать ArchiveBox в Linux, для чего исполь­зуем вир­туаль­ный сер­вер: это обес­печит высокос­корос­тной канал свя­зи с интерне­том и дол­жное быс­тро­дей­ствие, одновре­мен­но изба­вив нас от необ­ходимос­ти городить ого­род с уста­нов­кой вир­туаль­ной машины. В качес­тве опе­раци­онной сис­темы была выб­рана Ubuntu 20.04 LTS (в этой вер­сии Python вклю­чен в базовую пос­тавку сис­темы), но подой­дет, в прин­ципе, любой рас­простра­нен­ный дис­три­бутив Linux.

Вот такую конфигурацию сервера мы выбрали для установки ArchiveBox
Вот такую кон­фигура­цию сер­вера мы выб­рали для уста­нов­ки ArchiveBox

Итак, для ArchiveBox необ­ходим преж­де все­го Python, поэто­му для начала зай­дем на сер­вер и пос­мотрим, какая вер­сия уста­нов­лена в нашей сис­теме:

python3 -V

Нам нуж­на вер­сия не ниже 3.7. Сис­тема радос­тно отра­пор­товала, что на сер­вере уста­нов­лен Python 3.8.5, поэто­му обновлять его не при­дет­ся. Если же на тво­ей машине оби­тает прес­тарелая змея, обно­вить вер­сию мож­но коман­дой sudo apt-get upgrade python3. Что­бы уста­новить Python, исполь­зуй коман­ду sudo apt-get install python3.

Про­ще все­го уста­новить ArchiveBox с помощью Pip — инс­тру­мен­та, поз­воля­юще­го заг­ружать пакеты Python из репози­тория Python Package Index (PyPI). Если этот ком­понент отсутс­тву­ет в сис­теме, его необ­ходимо сна­чала уста­новить. Для это­го выпол­ним в тер­минале сле­дующие коман­ды:

sudo apt update
sudo apt-get install python3-pip

Обыч­но в ком­плек­те с Python 3 идет модуль Pip 3, но на вся­кий слу­чай давай про­верим, какая вер­сия Pip уста­нов­лена в сис­теме:

pip3 --version

В нашем слу­чае сер­вер отра­пор­товал, что вер­сия име­ет номер 20.0.2, и как минимум мы убе­дились, что Pip 3 в сис­теме при­сутс­тву­ет. Отлично, уста­нав­лива­ем сам ArchiveBox:

pip3 install archivebox
Установка ArchiveBox
Ус­танов­ка ArchiveBox

info

На локаль­ной машине с Linux уста­нов­ку ArchiveBox нуж­но запус­кать с исполь­зовани­ем sudo.

ArchiveBox не работа­ет из‑под поль­зовате­ля root, поэто­му для него нуж­но соз­дать отдель­ного юзе­ра с помощью коман­ды adduser username. Теперь от име­ни уже это­го поль­зовате­ля соз­даем рабочую пап­ку, в которую ArchiveBox будет скла­дывать заг­ружен­ные сай­ты:

mkdir archives && cd archives
archivebox init

На этом про­цеду­ра уста­нов­ки и нас­трой­ки инс­тру­мен­та закон­чена, мож­но перехо­дить к его исполь­зованию.

 

Архивируем сайты

Все коман­ды ArchiveBox име­ют общий вид

$ archivebox [command] [parameter]

где command — непос­редс­твен­но коман­да, а parameter — опци­ональ­ный ключ. Для добав­ления сай­та в архив слу­жит коман­да add. Так, что­бы соб­рать под­шивку нашего любимо­го жур­нала, нуж­но наб­рать в тер­минале

$ archivebox add 'https://xakep.ru'

ArchiveBox авто­мати­чес­ки соз­даст в сво­ей рабочей пап­ке суб­дирек­торию archive, в которую будет скла­дывать ска­чан­ные сай­ты — каж­дый в сво­ей вло­жен­ной пап­ке. В этой же пап­ке будет соз­дан файл index.html, куда добав­ляет­ся общая информа­ция о заар­хивиро­ван­ном сай­те, чис­ле соб­ранных фай­лов и их типе. На локаль­ной машине его мож­но открыть в бра­узе­ре; если же мы исполь­зуем VPS, этот файл нам не слиш­ком поможет, зато мы смо­жем прос­мотреть содер­жимое пап­ки с архи­вом в тер­минале.

Содержимое рабочей папки ArchiveBox
Со­дер­жимое рабочей пап­ки ArchiveBox

По умол­чанию ArchiveBox сох­раня­ет в архив толь­ко веб‑стра­ницу, ука­зан­ную в задан­ном URL. Но мож­но зас­тавить его выпол­нить рекур­сивный обход всех ссы­лок на этой стра­нице с ука­зан­ной глу­биной прос­мотра и добавить туда все, что по этим самым ссыл­кам будет най­дено. Для это­го слу­жит параметр --depth=N, где N — глу­бина прос­мотра ссы­лок. Нап­ример, для того что­бы ArchiveBox заар­хивиро­вал глав­ную стра­ницу сай­та и все стра­ницы, ссыл­ки на которые при­сутс­тву­ют на глав­ной, мож­но исполь­зовать коман­ду

$ archivebox add 'https://xakep.ru' --depth=1

Пос­коль­ку мы архи­виру­ем сай­ты на сер­вер VPS, добычу нуж­но пред­варитель­но ска­чать на локаль­ную машину с исполь­зовани­ем scp или любым дру­гим удоб­ным спо­собом. Мож­но, нап­ример, уста­новить на сер­вере vsftpd и получить дос­туп к содер­жимому архи­вов по FTP непос­редс­твен­но из бра­узе­ра либо с помощью любого FTP-кли­ента. А еще мож­но под­нять там Apache и перемес­тить содер­жимое архи­вов в домаш­нюю пап­ку веб‑сер­вера, что­бы прос­матри­вать их по HTTP.

Содержимое архива, доступное по FTP
Со­дер­жимое архи­ва, дос­тупное по FTP

В резуль­тате выпол­нения коман­ды archivebox add сайт сох­раня­ется вмес­те со всем содер­жимым, вклю­чая скрип­ты, изоб­ражения, CSS-фай­лы.

Архивный сайт, доступный локально после загрузки с сервера
Ар­хивный сайт, дос­тупный локаль­но пос­ле заг­рузки с сер­вера

ArchiveBox исполь­зует кон­соль­ную ути­литу youtube-dl для сох­ранения видео, бла­года­ря чему он может тянуть ролики с это­го популяр­ного виде­охос­тинга. Для их ска­чива­ния исполь­зует­ся та же коман­да, с помощью которой сох­раня­ются все осталь­ные сай­ты:

$ archivebox add [адрес_страницы_видео_на_YouTube]
 

Пакетная архивация сайтов

ArchiveBox так­же поз­воля­ет ска­чивать нес­коль­ко сай­тов по спис­ку, задан­ному в тек­сто­вом фай­ле. Что­бы исполь­зовать эту воз­можность, соз­дай прос­той тек­сто­вый файл, нап­ример с име­нем urls.txt, и запиши в нем адре­са сай­тов, которые хочешь ска­чать, — каж­дый адрес с новой стро­ки. На уда­лен­ном сер­вере это мож­но сде­лать с помощью редак­тора nano:

nano urls.txt

За­тем оста­нет­ся лишь «скор­мить» этот файл архи­вато­ру:

$ cat urls.txt | archivebox add

Есть у ArchiveBox еще одна воз­можность: если импорти­ровать зак­ладки бра­узе­ра в HTML-файл, а потом заг­рузить его на сер­вер (при исполь­зовании ArchiveBox на локаль­ной машине с линук­сом это­го не пот­ребу­ется), то такой файл тоже может слу­жить спис­ком URL для архи­вации. В этом слу­чае нуж­но исполь­зовать сле­дующую коман­ду:

$ archivebox add [путь_к_файлу]/bookmarks.html
 

Выводы

В качес­тве инс­тру­мен­та для копиро­вания интернет‑кон­тента ArchiveBox доволь­но удо­бен. С его помощью мож­но сох­ранять как отдель­ные стра­ницы, так и целые раз­делы сай­тов для пос­леду­юще­го изу­чения на локаль­ной машине или на вир­туаль­ном сер­вере, выпол­нять пакет­ную архи­вацию, а с помощью cron — копиро­вать кон­тент из сети по рас­писанию.

Бе­зус­ловно, наибо­лее ком­фор­тно исполь­зовать ArchiveBox на локаль­ной машине с Linux или macOS, но за неиме­нием таковых сой­дет и вир­туаль­ный сер­вер. ArchiveBox все еще находит­ся в ста­дии раз­работ­ки и неп­рерыв­но раз­вива­ется, поэто­му уже в недале­ком будущем в его сос­таве могут появить­ся новые фун­кции и воз­можнос­ти. За обновле­ниями мож­но сле­дить на стра­нич­ке ArchiveBox на GitHub.

6 комментариев

  1. Аватар

    Novosedoff

    01.02.2021 в 15:55

    Копирование информации с чужого сайта может быть весьма чревато
    https://www.securitylab.ru/news/495894.php

    • Аватар

      GrafaU

      01.02.2021 в 17:06

      распространение, не?

      • Аватар

        Novosedoff

        02.02.2021 в 01:20

        Я вообще не понял зачем велосипед изобретать. Рекламу Хакер гонит. Тот же Teleport Pro нормальные люди 10 лет назад использовали.
        Главное лишнего не накачать, чтоб не похоронили заживо 🙂

        • Валентин Холмогоров

          Валентин Холмогоров

          02.02.2021 в 12:00

          Телепорт, во-первых, шароварный, во-вторых, не обновляется уже 6 лет, в-третьих, работает с Microsoft Internet Explorer. Когда-то давно был такой браузер. Как раз примерно 10 лет назад 🙂

  2. Аватар

    Читатель2017

    15.02.2021 в 11:21

    xxxxx@xxxxxx:~$ archivebox init
    archivebox: команда не найдена

  3. Аватар

    Гамлиэль Фишкин (fishk.in)

    19.04.2021 в 11:20

    > Для запус­ка ArchiveBox в Windows мож­но исполь­зовать Docker

    Разве мышезависимые справятся с консольной утилитой?

    > городить ого­род с уста­нов­кой вир­туаль­ной машины

    Зачем мне виртуальная машина на моём компьютере с Debian’ом? Чтобы поставить ещё один дистр?

    > На локаль­ной машине с Linux уста­нов­ку ArchiveBox
    > нуж­но запус­кать с исполь­зовани­ем sudo.
    > ArchiveBox не работа­ет из‑под поль­зовате­ля root, поэто­му
    > для него нуж­но соз­дать отдель­ного юзе­ра с помощью коман­ды
    > adduser username.

    С команды adduser следует начинать использование системы. Использование VPS я всегда начинаю с того, что создаю непривилегированного пользователя, добавляю его в группу sudo, закидываю на VPS свой открытый SSH-ключ и запрещаю вход с паролем. После чего выхожу, вхожу под непривилегированным пользователем и запрещаю вход под root’ом. Разумеется, ставлю nftables и запрещаю подключение по SSH всем IP-адресам, кроме своих (у меня от провайдера выделенный IPv4-адрес и постоянный IPv6-диапазон /56).

Оставить мнение