Подтвердить что ты не робот

Wget span только для изображений /stylesheets/javascript, но не для ссылок

Wget имеет опцию для -H

Span to any host—‘-H’
The ‘-H’ option turns on host spanning, thus allowing Wget recursive run to visit any host referenced by a link. Unless sufficient recursion-limiting criteria are applied depth, these foreign hosts will typically link to yet more hosts, and so on until Wget ends up sucking up much more data than you have intended. 

Я хочу сделать рекурсивную загрузку (скажем, уровня 3), и я хочу получить изображения, таблицы стилей, javascripts и т.д. (то есть файлы, необходимые для правильной отображения страницы), даже если они находятся за пределами моего хост. Тем не менее, я не хочу следовать ссылке на другую страницу HTML (потому что тогда она может перейти на другую страницу HTML и т.д., Тогда число может взорваться.)

Возможно ли это сделать? Кажется, что элементы управления -H относятся к другим хостам как для изображений/таблиц стилей /javascript, так и для случая ссылок, а wget не позволяет мне разделять эти два.

4b9b3361

Ответ 1

Загрузка всех зависимостей на странице

Первый шаг - загрузка всех ресурсов конкретной страницы. Если вы посмотрите в man-страницах для wget, вы найдете следующее:

... загрузить одну страницу и все ее реквизиты (даже если они существуют на            отдельные веб-сайты), и убедитесь, что лот отображается правильно локально, этому автору нравится использовать несколько опций в дополнение к -p:

wget -E -H -k -K -p http://<site>/<document>

Получение нескольких страниц

К сожалению, это работает только на странице. Вы можете включить рекурсию с помощью -r, но затем вы столкнетесь с проблемой следующих внешних сайтов и взрыва. Если вы знаете полный список доменов, которые можно использовать для ресурсов, вы можете ограничить его только теми, кто использует -D, но это может быть сложно сделать. Я рекомендую использовать комбинацию -np (без родительских каталогов) и -l, чтобы ограничить глубину рекурсии. Вы можете начать получать другие сайты, но, по крайней мере, они будут ограничены. Если у вас возникли проблемы, вы можете использовать --exclude-domains, чтобы ограничить известные вызывающие проблемы. В конце концов, я думаю, что это лучше всего:

wget -E -H -k -K -p -np -l 1 http://<site>/level

Ограничение доменов

Чтобы выяснить, какие домены необходимо включить/исключить, вы можете использовать этот ответ для grep страницы или двух (вы хотели бы grep .orig файл) и перечислить ссылки внутри них. Оттуда вы сможете создать достойный список доменов, которые должны быть включены и ограничить его использованием аргумента -D. Или вы можете хотя бы найти некоторые домены, которые вы не хотите включать, и ограничить их использованием --exclude-domains. Наконец, вы можете использовать аргумент -Q, чтобы ограничить объем загружаемых данных в качестве защиты, чтобы предотвратить заполнение вашего диска.

Описания аргументов

  • -E
    • Если файл типа application/xhtml + xml или text/html загружен, и URL-адрес не заканчивается regexp \.[Hh][Tt][Mm][Ll]?, this     опция приведет к добавлению суффикса .html к локальному имени файла.
  • -H
    • Включить переключение между узлами при рекурсивном извлечении.
  • -k
    • После завершения загрузки конвертируйте ссылки в документе, чтобы сделать их подходящими для локального просмотра. Это влияет не только на  видимые гиперссылки, но любая часть документа, которая ссылается на внешний контент, например встроенные изображения, ссылки на таблицы стилей,  гиперссылки на не-HTML-контент и т.д.
  • -k
    • При преобразовании файла создайте резервную копию исходной версии с суффиксом .orig.
  • -p
    • Этот параметр заставляет Wget загружать все файлы, необходимые для корректного отображения данной HTML-страницы. Сюда относятся такие вещи, как  встроенные изображения, звуки и ссылочные таблицы стилей.
  • -np
    • Никогда не поднимайтесь в родительский каталог при рекурсивном возврате. Это полезный вариант, поскольку он гарантирует, что только файлы  ниже будет загружена определенная иерархия.
  • -l
    • Укажите глубину глубины глубины рекурсии.
  • -D
    • Установить домены, которым необходимо следовать. domain-list - список доменов, разделенных запятыми. Обратите внимание, что он не включается -H.
  • --exclude-domains
    • Укажите домены, которые не должны выполняться.
  • -Q
    • Укажите квоту загрузки для автоматического поиска. Значение может быть указано в байтах (по умолчанию), килобайтах (с суффиксом k) или мегабайтах (с суффиксом m).

Ответ 2

Просто поместите wget -E -H -k -K -p -r http://<site>/, чтобы загрузить полный сайт. Не нервничайте, если при загрузке вы открываете какую-то страницу, а ее ресурсы недоступны, потому что когда wget закончит все, она их преобразует!

Ответ 3

для загрузки всех "файлов, необходимых для правильной отображения страницы", вы можете использовать -p или --page-requisites, возможно, вместе с -Q или --quota

Ответ 4

В пределах одного уровня домена вы можете проверить все ссылки внутри и на сторонних серверах с помощью следующей команды.

wget --spider -nd -e robots=off -Hprb --level=1 -o wget-log -nv http://localhost

Ограничение здесь заключается в том, что он проверяет только один слой. Это хорошо работает с CMS, где вы можете сгладить сайт с помощью GET-переменной, а не с CMS-сгенерированных URL-адресов. В противном случае вы можете использовать свою любимую сторону сервера script, чтобы закодировать эту команду через каталоги. Чтобы получить полное объяснение всех параметров, проверьте это обязательство Github.

https://github.com/jonathan-smalls-cc/git-hooks/blob/LAMP/contrib/pre-commit/crawlDomain.sh

Ответ 5

Попробуйте использовать флаг wget --accept-regex; posix --regex-type скомпилирован в стандарт wget, но вы можете скомпилировать в движке relx perl pcre, если вам нужно что-то более сложное:

например. Следующие будут получать все png на внешних сайтах на один уровень в глубину и любые другие страницы, на которых есть слово google в URL: wget -r -H -k -l 1 --regex-type posix --accept-regex "(.*google.*|.*png)" "http://www.google.com"

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