Скачивание “умных” сайтов с помощью wget
Недавно появилась необходимость полностью скачать часть сайта для
простмотра на компьютере без интернета. Первым решением был плагин для
Firefox для создания архива веб-страниц и целых сайтов ScrapBook.
Но вскоре обнаружилась проблема - ScrapBook скачивал только одну
страницу из 10, на остальные сервер выдавал ошибку 500 (Internal server
error), хотя браузер заходил на все эти страницы нормально.
Стало ясно, что на сайте применяется защита от автоматического
скачивания.
И тут на помощь пришел wget…
Кратко о wget.
wget - это консольная программа для скачивания файлов из по протоколам HTTP(S)
и FTP. Поддерживает докачку файлов, работу со списками ссылок, позволяет
скачивать сайты целиком и многое другое.</p>
Посмотрев часть man-страницы wget, которая относится к части
автоматического
скачивания сайтов удалось найти решение против блокировки
автоматического
скачивания.
Итак, для начала нужно было замаскировать wget под какой-нибудь
распространенный
браузер. Поиск по “user agent” в google выдал множество результатов, я
выбрал
Firefox 2.0.0.8 для Linux. Указание user agent для wget:
-U Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8) Gecko/20071022 Ubuntu/7.10 (gutsy) Firefox/2.0.0.8
Другие параметры:
-r - скачивать сайт полностью, автоматически
переходя по ссылкам;
-l 2 - глубина скачивания(проходить по ссылкам на 2
уровня вниз);
-k - после скачивания преобразовать все ссыки в
html-файлах относительно
локальной файловой системы;
-np - не выходить за пределы заданной директории;
–wait 5 - ждать 5 секунд после каждого запроса. Многие
сайты вычисляют
программы для автоматического скачивания по времени между запросами. Но
тут
есть проблема - сайт может отслеживать запросы, повторяющиеся через
определенные промежутки времени.
Это и сгубило ScrapBook - он делает паузу в 3 секунды между запросами, и
этот
параметр не настраивается(по крайней мере поверхностный поиск
результатов не
дал).
В wget есть параметр –randomwait, который в случайном
порядке устанавливает
промежуток между запросами, умножая –wait на число от 0.5 до 1.5. Это
позволяет
обойти проверки на запросы, повторяющиеся с определенной периодичностью.
Итак, после строка параметров для wget выглядела следующим образом:
wget -U Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8) Gecko/20071022 Ubuntu/7.10 (gutsy) Firefox/2.0.0.8 -r -l 2 -k -np –wait 5 –randomwait адрес_страницы
Такой подход позволил скачать часть сайта в обход системы его защиты,
при
этом не создавая большой нагрузки на сервер(просто потому, что он этого
сделать не позволил=)).

Последние обновления: