CURL для завантаження каталогу


38

Я намагаюся завантажити повний каталог веб-сайтів за допомогою CURL. Наступна команда не працює:

curl -LO http://example.com/

Вона повертає помилку: curl: Remote file name has no length!.

Але коли я це роблю: curl -LO http://example.com/someFile.typeце працює. Будь-яка ідея, як завантажити всі файли у вказаному каталозі? Спасибі.

Відповіді:


33

Завжди працює для мене, не включає жодного батьківського та рекурсивного, щоб отримати лише потрібний каталог.

 wget --no-parent -r http://WEBSITE.com/DIRECTORY

1
Це має бути прийнятою відповіддю.
Хуан Хіменес

Спроба завантажити папку з git. Я спробував wget --no-parent -r http://WEBSITE.com/DIRECTORYі теж без --no-parent- не вийшло.
Сем-Т

32

HTTP насправді не має поняття каталогів. Штрихи, окрім перших трьох ( http://example.com/), не мають особливого значення, за винятком ..відносних URL-адрес. Тому, якщо сервер не дотримується певного формату, немає можливості "завантажити всі файли у вказаному каталозі".

Якщо ви хочете завантажити весь сайт, найкраще рекурсивно переходити всі посилання на головній сторінці. Curl не може цього зробити, але wget може. Це буде працювати, якщо веб-сайт не надто динамічний (зокрема, wget не побачить посилання, побудовані за допомогою коду Javascript). Почніть з wget -r http://example.com/та перегляньте "Параметри рекурсивного пошуку" та "Параметри рекурсивного прийому / відхилення" в посібнику wget для отримання більш релевантних параметрів (глибина рекурсії, списки виключень тощо).

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


Як wget здатний це зробити. ??
Шрікан

@Srikan wget розбирає HTML, щоб знайти посилання, які він містить, і рекурсивно завантажує (добірку) цих посилань.
Жил 'SO- перестань бути злим'

Якщо у файлів немає внутрішніх посилань, рекурсивне завантаження не може отримати всі файли. Скажімо, існує папка HTTP деяких файлів txt. Чи вдасться wget отримати всі файли. Дозвольте спробувати після цього коментаря
Шрікан

@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/… ОП повинен усвідомлювати, що це все ще не отримує те, що він шукає ... це лише наступні посилання, доступні на повернених сторінках.
Бред

2

Ви можете використовувати розширення Firefox DownThemAll! Це дозволить вам завантажити всі файли в каталозі одним клацанням миші. Він також настроюється, і ви можете вказати, які типи файлів потрібно завантажити. Це найпростіший спосіб, який я знайшов.


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.