CURL, чтобы скачать каталог

38

Я пытаюсь загрузить полный каталог веб-сайтов, используя CURL. Следующая команда не работает:

curl -LO http://example.com/

Она возвращает ошибку: curl: Remote file name has no length!.

Но когда я делаю это: curl -LO http://example.com/someFile.typeэто работает. Есть идеи, как скачать все файлы в указанном каталоге? Спасибо.

Foo
источник

Ответы:

33

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

 wget --no-parent -r http://WEBSITE.com/DIRECTORY
stanzheng
источник
1
Это должен быть принятый ответ.
Хуан Хименес
Пытаюсь скачать папку из git. Я пробовал wget --no-parent -r http://WEBSITE.com/DIRECTORYи тоже без --no-parent- не получилось.
Сам-Т
32

HTTP на самом деле не имеет понятия о каталогах. Косые черты, кроме первых трех ( http://example.com/), не имеют какого-либо специального значения, кроме как ..в относительных URL. Поэтому, если сервер не следует определенному формату, нет способа «загрузить все файлы в указанном каталоге».

Если вы хотите загрузить весь сайт, лучше всего рекурсивно просматривать все ссылки на главной странице. Керл не может этого сделать, но wget может. Это будет работать, если веб-сайт не слишком динамичен (в частности, wget не будет видеть ссылки, созданные с помощью кода Javascript). Начните с wget -r http://example.com/и посмотрите «Параметры рекурсивного извлечения» и «Параметры рекурсивного принятия / отклонения» в руководстве по wget для получения более соответствующих параметров (глубина рекурсии, списки исключений и т. Д.).

Если веб-сайт пытается заблокировать автоматические загрузки, вам может потребоваться изменить строку пользовательского агента ( -U Mozilla) и игнорировать ее robots.txt(создайте пустой файл example.com/robots.txtи используйте этот -ncпараметр, чтобы wget не пытался загрузить его с сервера).

Жиль "ТАК - прекрати быть злым"
источник
Как wget может это сделать. ??
Срикан
@Srikan wget анализирует HTML-код, чтобы найти содержащиеся в нем ссылки, и рекурсивно загружает (выборочно) эти ссылки.
Жиль "ТАК - перестань быть злым"
Если файлы не имеют внутренних ссылок, то при рекурсивной загрузке не удается получить все файлы. Допустим, есть папка HTTP некоторых текстовых файлов. Удастся ли wget получить все файлы. Позвольте мне попробовать это после этого комментария
Srikan
@Srikan HTTP не имеет понятия каталога. Рекурсивная загрузка означает переход по ссылкам на веб-страницах (включая веб-страницы, созданные сервером для отображения списка каталогов, если веб-сервер делает это ).
Жиль "ТАК - перестань быть злым"
wget поддерживает игнорирование robots.txt с флагом -e robots=off. В качестве альтернативы вы можете избежать загрузки, отклонив его с помощью -R "robots.txt".
Райан Крейдж
17

В этом случае curlНЕ лучший инструмент. Вы можете использовать wgetс -rаргументом, например так:

wget -r http://example.com/ 

Это самая основная форма, и вы также можете использовать дополнительные аргументы. Для получения дополнительной информации см. manpage( man wget).

марокканский
источник
5

Это невозможно Не существует стандартного, общепринятого, способа для веб-сервера вернуть вам содержимое каталога. Большинство серверов генерируют HTML-индекс каталога, если он настроен для этого, но этот вывод не является стандартным и не гарантируется никакими средствами. Вы можете проанализировать этот HTML, но имейте в виду, что формат будет меняться от сервера к серверу и не всегда будет включен.

штифтик
источник
Посмотрите на это приложение под названием Site Sucker. sitesucker.us . Как они это делают?
Foo
Они анализируют HTML-файл и скачивают каждую ссылку в нем.
Брэд
Используя wgetили curl?
Foo
7
@Brad: curl не анализирует HTML, но wget делает именно это (это называется рекурсивным поиском).
Жиль "ТАК - перестань быть злым"
1
Ах, ну я исправлюсь! gnu.org/software/wget/manual/html_node/… OP должен знать, что он по-прежнему не получает то, что ищет ... он только следует ссылкам, которые доступны на возвращенных страницах.
Брэд
2

Вы можете использовать расширение Firefox DownThemAll! Это позволит вам скачать все файлы в каталоге в один клик. Это также настраивается, и вы можете указать, какие типы файлов для загрузки. Это самый простой способ, который я нашел.

Asdf
источник
0

Вы можете найти использование для риппера веб-сайта здесь, он загрузит все и изменит содержание / внутренние ссылки для локального использования. Хороший можно найти здесь: http://www.httrack.com

Гаурав Иосиф
источник