Я использую wget для загрузки содержимого веб-сайта, но wget загружает файлы один за другим.
Как я могу сделать загрузку wget с помощью 4 одновременных соединений?
Я использую wget для загрузки содержимого веб-сайта, но wget загружает файлы один за другим.
Как я могу сделать загрузку wget с помощью 4 одновременных соединений?
используйте aria2:
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
Мне это нравится!!
Wget не поддерживает несколько соединений сокетов, чтобы ускорить загрузку файлов.
Я думаю, мы можем сделать немного лучше, чем gmarian ответ.
Правильный способ - использовать aria2
.
aria2c -x 16 -s 16 [url]
# | |
# | |
# | |
# ---------> the number of connections here
Поскольку GNU-параллель еще не упоминалась, позвольте мне дать другой способ:
cat url.list | parallel -j 8 wget -O {#}.html {}
Я нашел (наверное) решение
В процессе загрузки нескольких тысяч файлов журнала с одного сервера на другой у меня внезапно возникла необходимость выполнить серьезную многопоточную загрузку в BSD, предпочтительно с помощью Wget, поскольку это был самый простой способ справиться с этим. Немного оглядываясь, привело меня к этому маленькому самородку:
wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url]
Просто повторите
wget -r -Np -N [url]
столько потоков, сколько вам нужно... Теперь, учитывая, что это не красиво, и, конечно, есть лучшие способы сделать это, но если вы хотите что-то быстрое и грязное должен сделать трюк...
Примечание: опция -N
заставляет wget
загружать только "более новые" файлы, что означает, что он не будет перезаписывать или перезагружать файлы, если их временная метка не изменяется на сервере.
Новый (но еще не выпущенный) инструмент - Mget. У него уже есть много опций, известных из Wget, и поставляется с библиотекой, которая позволяет легко встраивать (рекурсивную) загрузку в ваше собственное приложение.
Чтобы ответить на ваш вопрос:
mget --num-threads=4 [url]
ОБНОВИТЬ
Mget теперь разработан как Wget2 с множеством исправленных ошибок и дополнительными функциями (например, поддержка HTTP/2).
--num-threads
теперь --max-threads
.
Другая программа, которая может это сделать, - axel
.
axel -n <NUMBER_OF_CONNECTIONS> URL
Я настоятельно рекомендую использовать httrack.
ex: httrack -v -w http://example.com/
По умолчанию используется зеркало с 8 одновременными соединениями. В Httrack есть множество вариантов, где можно играть. Посмотрите.
Как отмечали другие плакаты, я бы предложил вам взглянуть на aria2. На странице руководства Ubuntu для версии 1.16.1:
aria2 - это утилита для загрузки файлов. Поддерживаемые протоколы: HTTP (S), FTP, BitTorrent и Metalink. aria2 может загрузить файл из нескольких источников/протоколов и пытается использовать максимальную ширину загрузки. Он поддерживает загрузку файла из HTTP (S)/FTP и BitTorrent одновременно, в то время как данные, загруженные с HTTP (S)/FTP, загружаются в рой BitTorrent. С помощью контрольных сумм Metalink, aria2 автоматически проверяет куски данных при загрузке файла, такого как BitTorrent.
Вы можете использовать флаг -x
для указания максимального количества подключений на сервер (по умолчанию: 1):
aria2c -x 16 [url]
Если один и тот же файл доступен из нескольких мест, вы можете загрузить его из всех. Используйте флаг -j
, чтобы указать максимальное количество параллельных загрузок для каждого статического URI (по умолчанию: 5).
aria2c -j 5 [url] [url2]
Посмотрите http://aria2.sourceforge.net/ для получения дополнительной информации. Для информации об использовании справочная страница действительно описательна и имеет раздел внизу с примерами использования. Онлайн-версию можно найти на http://aria2.sourceforge.net/manual/en/html/README.html.
wget can not download в нескольких соединениях, вместо этого вы можете попробовать использовать другую программу, такую как aria2.
попробуй pcurl
http://sourceforge.net/projects/pcurl/
использует curl вместо wget, загружает в 10 сегментах параллельно.
make
можно легко распараллелить (например, make -j 4
). Например, здесь простой Makefile
я использую для параллельного скачивания файлов с помощью wget:
BASE=http://www.somewhere.com/path/to
FILES=$(shell awk '{printf "%s.ext\n", $$1}' filelist.txt)
LOG=download.log
all: $(FILES)
echo $(FILES)
%.ext:
wget -N -a $(LOG) $(BASE)/[email protected]
.PHONY: all
default: all
Они всегда говорят, что это зависит, но когда дело доходит до зеркального отображения веб-сайта, лучше всего httrack. Это очень быстро и легко работать. Единственный недостаток - это так называемый форум поддержки, но вы можете найти свой путь, используя официальную документацию. У него есть интерфейс GUI и CLI, и он поддерживает куки файлы только для чтения документов. Это лучший вариант. (Будьте осторожны с этим инструментом, вы можете загрузить всю сеть на своем жестком диске)
httrack -c8 [url]
По умолчанию максимальное количество одновременных подключений ограничено 8, чтобы избежать перегрузки сервера
использование
aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &
в website.txt введите 1 URL в строке, например:
https://www.example.com/1.mp4
https://www.example.com/2.mp4
https://www.example.com/3.mp4
https://www.example.com/4.mp4
https://www.example.com/5.mp4
используйте xargs
чтобы заставить wget
работать в нескольких файлах параллельно
#!/bin/bash
mywget()
{
wget "$1"
}
export -f mywget
# run wget in parallel using 8 thread/connection
xargs -P 8 -n 1 -I {} bash -c "mywget '{}'" < list_urls.txt
Параметры Aria2, правильный способ работы с файлом размером менее 20 МБ
aria2c -k 2M -x 10 -s 10 [url]
-k 2M
разделить файл на 2 МБ
-k
или --min-split-size
имеет значение по умолчанию 20 МБ, если вы не установите эту опцию и файл меньше 20 МБ, он будет работать только в одном соединении независимо от того, какое значение -x
или -s