Получение всех файлов с веб-страницы с помощью curl


87

Я хотел бы загрузить файлы сразу со следующей страницы, используя curl: http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Я попытался, curl http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/и он вернул кучу строк в терминале, но не получил никаких файлов.

Ответы:


125

Используйте wgetвместо этого. Вы можете установить его с помощью, brew install wgetесли вы установили Homebrew или sudo port install wgetMacPorts.

Для загрузки файлов из списка каталогов используйте -r(рекурсивно), -np(не переходите по ссылкам на родительские каталоги), и -kчтобы ссылки в загруженном HTML или CSS указывали на локальные файлы (credit @xaccrocheur).

wget -r -np -k http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Другие полезные опции:

  • -nd (без каталогов): загрузить все файлы в текущий каталог
  • -e robots.off: игнорировать файлы robots.txt, не загружать файлы robots.txt
  • -A png,jpg: принимать только файлы с расширениями pngилиjpg
  • -m (зеркало): -r --timestamping --level inf --no-remove-listing
  • -nc, --no-clobber: Пропустить загрузку, если файлы существуют

3
wget -r -np -k http://your.website.com/specific/directory, Хитрость заключается в том, чтобы использовать -kдля преобразования ссылки (изображения и т. Д.) Для локального просмотра.
yPhil

brewи portне работает для меня, чтобы установить wget. Что я должен делать?
Хосейн Хейдари

@HoseynHeydari: вы можете использовать rudix.org для скомпилированных двоичных файлов для OSX. так что вам нужно установить rudix и затем использовать: sudo rudix install wget
Mamonu

Опция -kне всегда работает. Например, если у вас есть две ссылки, указывающие на один и тот же файл на веб-странице, которую вы пытаетесь захватить рекурсивно, wgetкажется, что конвертируется только ссылка первого экземпляра, но не второго.
Кун

22

curlможет читать только отдельные файлы веб-страниц, куча строк, которые вы получили, на самом деле является индексом каталога (который вы также видите в своем браузере, если переходите по этому URL-адресу). Чтобы использовать curlи некоторые магические инструменты Unix, чтобы получить файлы, вы можете использовать что-то вроде

for file in $(curl -s http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/ |
                  grep href |
                  sed 's/.*href="//' |
                  sed 's/".*//' |
                  grep '^[a-zA-Z].*'); do
    curl -s -O http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/$file
done

который получит все файлы в текущем каталоге.

Для более сложных потребностей (включая получение нескольких файлов с сайта с папками / каталогами) wget(как уже предлагалось в другом ответе) это лучший вариант.


Спасибо. Это хорошее решение, и хороший пример работы!
Эгелев

1
xmllint --html --xpath '//a/@href'вероятно лучше парсер чем grep.
ceving

8

Ссылка: http://blog.incognitech.in/download-files-from-apache-server-listing-directory/

Вы можете использовать следующую команду:

wget --execute="robots = off" --mirror --convert-links --no-parent --wait=5 <website-url>

Пояснения к каждому варианту

  • wget: Простая команда, чтобы сделать запрос CURL и загрузить удаленные файлы на наш локальный компьютер.
  • --execute="robots = off": Это будет игнорировать файл robots.txt при сканировании страниц. Это полезно, если вы не получаете все файлы.
  • --mirror: Эта опция в основном будет отражать структуру каталогов для данного URL. Это сокращение, -N -r -l inf --no-remove-listingкоторое означает:
    • -N: не восстанавливать файлы, если они не новее локальных
    • -r: указать рекурсивную загрузку
    • -l inf: максимальная глубина рекурсии (inf или 0 для бесконечного)
    • --no-remove-listing: не удаляйте файлы .listing
  • --convert-links: сделать ссылки в загруженном HTML или CSS указывать на локальные файлы
  • --no-parent: не подниматься в родительский каталог
  • --wait=5: подождите 5 секунд между поисками. Чтобы мы не трогали сервер.
  • <website-url>Это URL-адрес веб-сайта, с которого можно скачивать файлы.

Счастливого скачивания: smiley:


3

Вы можете использовать httrack, доступный для Windows / MacOS и устанавливаемый через Homebrew.


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

0

Для тех из нас, кто предпочел бы использовать приложение с графическим интерфейсом, есть недорогая условно-бесплатная программа DeepVacuum для Mac OS X , которая реализуется wgetв удобной для пользователя форме со списком предустановок, которые могут обрабатывать часто необходимые задачи. Вы также можете сохранить свои собственные конфигурации в качестве пресетов.

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.