[Wget - насос для Интернета]
Wget 1.5.3. Руководство пользователя
VAP home logo

Следование ссылкам

При рекурсивной выгрузке возникает желание не выгружать ненужные данные. Большинству пользователей хотелось бы выгружать именно то, что необходимо, поэтому хочется, чтобы Wget следовал только определенным ссылкам.

Например, если вы желаете выгрузить музыкальный архив с сервера "fly.cc.fer.hr", то вы не желаете вместе с ним получить все домашние страницы, на которые могут быть ссылки внутри выгружаемого архива.

Wget предоставляет несколько механизмов, которые позволяют вам осуществить точную настройку обрабатываемых ссылок.


Относительные ссылки

Если переход осуществляется только по относительным ссылкам (опция "-L"), рекурсивная выгрузка никогда не выполнит смену хоста. Продолжительные по времени запросы DNS не выполняются, поэтому скорость процесса будет высокой при минимальной нагрузке на сеть. Этого часто будет достаточно для ваших нужд, особенно в случае зеркалирования страниц являющихся результатом работы различного рода "x2html" фильтров, которые в основном генерируют относительные ссылки.


Проверка хостов

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

Для этой опции проблематичным являются синонимы доменов и хостов. Поскольку не существует способа для Wget понять, что "regoc.srce.hr" и "www.srce.hr" - это один и тот же хост или, что "fly.cc.fer.hr" то же самое, что и "fly.cc.etf.hr". Поэтому, когда встречается абсолютная ссылка, то выполняется проверка хоста DNS запросом "gethostbyname" с целью выяснения не тот же самый ли этот хост. Однако, даже несмотря на то, что DNS запросы кэшируются, это приводит к заметному снижению производительности особенно при обработке больших индексов домашних страниц на различных хостах, поскольку каждый хост должен быть проверен через DNS на предмет того не является ли он синонимом для начального хоста.

Для избежания больших задержек возможно использование опции "-nh", которая отключает использование DNS и Wget сравнивает имена хостов посимвольно. Это может значительно ускорить процесс, но и сделать его значительно менее достоверным, потому что такие хоста как "www.srce.hr" и "regoc.srce.hr" будут рассматриваться как различные.

Заметим, что современные HTTP сервера позволяют использовать один IP адрес для нескольких виртуальных серверов, каждый из которых имеет свою собственную иерархию каталогов. Подобные сервера различаются по их именам хостов, хотя все они указывают на один и тот же IP. Чтобы все это работало клиент должен посылать заголовок "Host", что, собственно, Wget и делает. Однако в этом случае Wget не должен пытаться распознать "настоящий" адрес хоста или пытаться использовать подобные имена для доступа, т.е. "-nh" должен быть включен.

Иными словами, опция "-nh" должна использоваться при рекурсивной выгрузке с виртуальных серверов различаемых по именам хостов. Поскольку количество подобных серверов растет, в будущем, возможно, режим "-nh" станет умалчиваемым.


Доменная избирательность

При помощи опции "-D" вы можете определять имена доменов, которые будут обрабатываться. В этом случае DNS запросы для хостов, имена которых не принадлежат указанным доменам, выполняться не будут. Поэтому вы можете определить "-Dmit.edu" чтобы быть абсолютно уверенным, что ничего за пределами MIT просмотрено не будет. Это очень важно и полезно. Это так же значит, что "-D" не подразумевает "-H" (перемещение между хостами), которая должна определяться непосредственно. Использование данных опций позволяет увеличить скорость обработки одновременно с сохранением достоверности проверки для всех хостов. Поэтому вы можете выполнять

wget -r -D.hr http://fly.cc.fer.hr/

чтобы быть уверенным, что только хоста в домене ".hr" будут опрошены через DNS для проверки их идентичности с "fly.cc.fer.hr". Поэтому "fly.cc.etf.hr" будет проверен (только один раз!) и признан эквивалентным, а "www.gnu.ai.mit.edu" не будет проверен никогда.

Конечно доменная избирательность может быть использована для ограничения выгрузки в пределах определенного домена с одновременным обходом хостов в его пределах, но в этом случае необходимо явное использование опции "-H". Например:

wget -r -H -Dmit.edu,stanford.edu http://www.mit.edu/

Начнет работать с "http://www.mit.edu/" последовательно переходя по ссылкам в пределах MID и Stanford.

Если существуют домены, которые должны быть исключены, то вы можете проделать это опцией "--exclude-domains", которая принимает тот же тип аргументов, что и "-D", но будет исключать все перечисленные домены. Например, если у вас есть желание выгрузить все домены в пределах домена "foo.edu" исключив при этом "sunsite.foo.edu", то вы можете проделать следующее:

wget -rH -Dfoo.edu --exclude-domains sunsite.foo.edu \
     http://www.foo.edu/

Все хоста

Когда определена опция "-H" без указания опции "-D", то обрабатываются все встречающиеся хоста. В этом случае полностью отсутствуют какие-то ни было ограничения на части сети, к которым Wget будет обращаться для получения документов, кроме максимальной глубины рекурсии. То есть если страница ссылается, скажем, на "www.yahoo.com", то он тоже будет обработан. Данная опция редко применима сама по себе.


Типы файлов

При выгрузке материалов с WWW вам часто будет необходимым ограничить выгружаемые данные определенными типами файлов. Например, если вы заинтересованы только в выгрузке GIF файлов, то вы не будете слишком обрадованы выгрузке документов Postscript и наоборот.

Wget предоставляет две опции для решения этой проблемы. Описание каждой опции приводит ее короткое имя, длинное имя и эквивалентную команду файла ".wgetrc".

-A ACCLIST
--accept ACCLIST
accept = ACCLIST

Аргументом (ACCLIST) опции является список суффиксов имен файлов или шаблонов определяющий что Wget будет выгружать во время рекурсии. Суффиксом здесь является завершающая часть имени файла и состоит из "нормальных" символов, например, "gif" или ".jpg". Шаблоны позволяют использовать мета-символы подобно шаблонам оболочки командной строки, например, "books*" или "zelazny*196[0-9]*".

Таким образом определение "wget -A gif,jpg" укажет Wget выгружать только файлы заканчивающиеся на "gif" или "jpg", т.е. графические файлы формата GIF или JPEG. С другой стороны, 'wget -A "zelazny*196[0-9]*"' будет выгружать только файлы с именами начинающимися с "zelazny" и содержащие числа от 1960 до 1969 далее в любом месте имени файла. За объяснением принципов функционирования шаблонов обратитесь к руководству на вашу оболочку.

Разумеется любое количество суффиксов и шаблонов может быть объединено в разделенный запятыми список и передано аргументом для "-A".

-R REJLIST
--reject REJLIST
reject = REJLIST

Данная опция работает аналогично опции "--accept", только ее логика является прямо противоположной. В этом случае Wget будет выгружать любые файлы за исключением тех, что попадают под суффиксы или шаблоны указанные в списке аргумента (REJLIST).

Таким образом, если вы хотите выгрузить со страницы все, исключая увесистые файлы MPEG и .AU, вы можете воспользоваться "wget -R mpg,mpeg,au". Аналогично, для выгрузки всех файлов исключая те, чье имя начинается на "bjork", воспользуйтесь 'wget -R "bjork*"'. Двойные кавычки в командной строке используются для того, чтобы оболочка командной строки сама не обрабатывала шаблон.

Опции "-A" и "-R" могут использоваться совместно для получения очень точного поведения при выгрузке. Например, 'wget -A "*zelazny*" -R .ps' приведет к выгрузке всех файлов содержащих "zelazny" как часть их имени, но исключая все Postscript файлы.

Заметим, что эти две опции не касаются выгрузки HTML файлов, Wget должен выгружать все HTML документы чтобы выяснять куда ему двигаться дальше, в противном случае рекурсивная выгрузка становится просто бессмысленной.


Ограничения на уровне каталогов

Независимо от других типов обработки ссылок часто бывает полезно установить ограничения на получаемые файлы на основе каталогов, в которых они расположены. Тому может быть много причин. Домашние страницы обычно организуются на уровне каталогов. Некоторые каталоги содержат бесполезную информацию, например "cgi-bin" или "/dev".

Wget предоставляет три опции для удовлетворения этих требований. Описание каждой опции приводит ее короткое имя, длинное имя и эквивалентную команду файла ".wgetrc".

-I СПИСОК
--include СПИСОК
include_directories = СПИСОК

Опция принимает разделенный запятыми СПИСОК каталогов, которые должны быть обработаны при выгрузке. Все остальные каталоги будут просто проигнорированы. Каталоги должны указываться как абсолютные.

Таким образом, если в хотите выгрузить данные с "http://host/people/bozo/", переходя только по ссылкам на коллег bozo в каталоге "/people", и глюковатые скрипты в "/cgi-bin", вы можете выполнить:

wget -I /people,/cgi-bin http://host/people/bozo/
-X СПИСОК
--exclude СПИСОК
exclude_directories = СПИСОК

Данная опция полностью противоположна "-I". Здесь СПИСОК - разделенный запятыми перечень каталогов, которые должны быть исключены из выгрузки. Например, если вы не хотите чтобы Wget выгружал данные из каталога "/cgi-bin", то просто укажите "-X /cgi-bin" в командной строке.

Подобно опциям "-A" и "-R", эти две опции могут быть использованы совместно для получения более точных результатов работы. Например, если вы хотите выгрузить все файлы из иерархии каталогов "/pub" за исключением каталога "/pub/worthless", то укажите "-I/pub -X/pub/worthless".

-np
--no-parent
no_parent = on

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

Опция "--no-parent" (сокращенно "-np") применима в этом случае. Ее использование гарантирует, что при выгрузке вы никогда не покинете существующую иерархию. Предположим, что вы запускаете Wget как:

wget -r --no-parent http://somehost/~luzer/my-archive/

То вы можете спокойно отдохнуть уверенными в том, что ни одна из ссылок на "/~his-girls-homepage/" или "/~luzer/all-my-mpegs/" не будет обработана, а будут выгружены только интересующие вас данные. В общем, опция "--no-parent" идентична "-I/~luzer/my-archive", за тем исключением, что она отрабатывает перенаправления более интеллектуальным образом.


FTP ссылки

Правила для FTP немного специфичны, то есть такие, какими они и должны быть. FTP ссылки в HTML документы включают чаще всего именно для ссылки, поэтому чаще всего нет никакой необходимости их обрабатывать по умолчанию.

Для того, чтобы FTP ссылки в HTML документе все же обрабатывались, существует опция "--follow-ftp". При ее указании будет производиться переход между хостами по FTP ссылкам независимо от опции "-H". Это логично, поскольку FTP ссылки почти никогда не указывают на тот же хост, где находится HTTP сервер. По этим же причинам опция "-L" не оказывает никакого влияния на такую выгрузку. С другой стороны, доменная избирательность (-D) и правила суффиксов (-A и -R) работают как обычно.

Отметим так же, что следование ссылкам на FTP каталоги не приведет к последующей рекурсивной выборке по ссылке.




ФОБОС: погода в г.Тольятти