Я хотел бы получить все файлы с веб-страницы ниже, используя curl
:
http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/
Я пытался:
curl http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/
Он вернул кучу строк в терминал, но не получил ни одного файла.
Используйте wget
вместо этого.
Установите его с помощью Homebrew: brew install wget
или MacPorts:sudo port install wget
Для загрузки файлов из списка каталогов используйте -r
(рекурсивно), -np
(не переходите по ссылкам на родительские каталоги), а -k
также для того, чтобы ссылки в загруженном HTML или CSS указывали на локальные файлы (кредит @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
: пропустить загрузку, если файлы существуют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
(как уже предлагалось в другом ответе) это лучший вариант.
xmllint --html --xpath '//a/@href'
вероятно, лучший парсер, чем grep
.Ссылка: 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>
: это адрес веб-сайта, откуда можно скачать файлы.Удачной загрузки :smiley:
Вы можете использовать httrack, доступный для Windows/MacOS и устанавливаемый через Homebrew.
Для тех из нас, кто предпочитает использовать приложение с графическим интерфейсом, есть недорогая условно-бесплатная программа DeepVacuum для Mac OS X , которая реализована wget
в удобной для пользователя форме со списком предустановок, которые могут выполнять часто необходимые задачи. Вы также можете сохранить свои собственные настройки в качестве пресетов.
yФил
wget -r -np -k http://your.website.com/specific/directory
. Хитрость заключается в использовании-k
для преобразования ссылок (изображений и т. д.) для локального просмотра.Хосейн Хейдари
brew
иport
у меня не работает установка wget. Что мне делать?Мамону
Кун
-k
не всегда работает. Например, если у вас есть две ссылки, указывающие на один и тот же файл на веб-странице, которую вы пытаетесь рекурсивно захватить,wget
кажется, что преобразуется только ссылка первого экземпляра, но не вторая.Раффи Хачадурян
/
в конце.Раффи Хачадурян
index.html
.