Tôi đang sử dụng wget để tải xuống nội dung trang web, nhưng wget tải từng tệp một.
Làm cách nào để tải xuống bằng cách sử dụng 4 kết nối đồng thời?
Tôi đang sử dụng wget để tải xuống nội dung trang web, nhưng wget tải từng tệp một.
Làm cách nào để tải xuống bằng cách sử dụng 4 kết nối đồng thời?
Câu trả lời:
sử dụng aria2:
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
Tôi thích nó !!
-s
chỉ định số lượng phân chia và -k
chỉ định kích thước tối thiểu cho mỗi phân đoạn - nếu không, bạn có thể không bao giờ đạt được các -x
kết nối tối đa.
Wget không hỗ trợ nhiều kết nối ổ cắm để tăng tốc độ tải xuống các tệp.
Tôi nghĩ rằng chúng ta có thể làm tốt hơn một chút so với câu trả lời của gmarian.
Cách chính xác là sử dụng aria2
.
aria2c -x 16 -s 16 [url]
# | |
# | |
# | |
# ---------> the number of connections here
-x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1
và-s, --split=N Download a file using N connections. If more than N URIs are given, first N URIs are used and remaining URLs are used for backup. If less than N URIs are given, those URLs are used more than once so that N connections total are made simultaneously. The number of connections to the same host is restricted by the --max-connection-per-server option. See also the --min-split-size option. Possible Values: 1-* Default: 5
About the number of connections Since 1.10.0 release, aria2 uses 1 connection per host by default and has 20MiB segment size restriction. So whatever value you specify using -s option, it uses 1 connection per host. To make it behave like 1.9.x, use --max-connection-per-server=4 --min-split-size=1M.
aria2c -x 4 -k 1M url
và làm việc tốt cho tôi (một máy chủ với một giới hạn 100k cho mỗi kết nối để tôi tải về tại 400k với các thông số nói)
aria2
nào không hỗ trợ tải HTTP đệ quy, làm cho nó một sự thay thế không đạt tiêu chuẩn cho wget
nếu -r
được mong muốn.
Vì GNU song song chưa được đề cập, tôi xin đưa ra một cách khác:
cat url.list | parallel -j 8 wget -O {#}.html {}
cat
, mặc dù. Trong bối cảnh hạn chế này, nó khá vô hại, nhưng có lẽ bạn không muốn duy trì mô hình này.
Tôi tìm thấy (có lẽ) một giải pháp
Trong quá trình tải xuống vài nghìn tệp nhật ký từ máy chủ này sang máy chủ tiếp theo, tôi đột nhiên có nhu cầu tải xuống đa luồng nghiêm trọng trong BSD, tốt nhất là với Wget vì đó là cách đơn giản nhất tôi có thể nghĩ đến khi xử lý việc này. Một chút nhìn xung quanh đã dẫn tôi đến cái nugget nhỏ này:
wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url]
Chỉ cần lặp lại số
wget -r -np -N [url]
lượng chủ đề mà bạn cần ... Bây giờ, điều này không đẹp và chắc chắn có nhiều cách tốt hơn để làm điều này nhưng nếu bạn muốn thứ gì đó nhanh và bẩn thì nên thực hiện thủ thuật ...
Lưu ý: tùy chọn -N
làm cho wget
tải về chỉ "mới hơn" tác phẩm, có nghĩa là nó sẽ không ghi đè hoặc tái tải file trừ khi thay đổi dấu thời gian của họ trên máy chủ.
-nc
tùy chọn: "no clobber" - nó khiến wget bỏ qua các tập tin được tải xuống (thậm chí một phần).
wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
Rất xấu, nhưng này, nó hoạt động. : P
-b
lá cờ sẽ chạy quá trình wget ở chế độ nền, như là một thay thế cho bash của &
điều khiển công việc built-in. STDOUT sẽ được ghi vào wget-log nếu -o <filename>
không được chỉ định. Tốt cho kịch bản. Xem wget (1) để biết thêm chi tiết.
Một chương trình khác có thể làm điều này là axel
.
axel -n <NUMBER_OF_CONNECTIONS> URL
Đối với Auth HTTP baisic,
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Một công cụ mới (nhưng chưa được phát hành) là Mget . Nó đã có nhiều tùy chọn được biết đến từ Wget và đi kèm với một thư viện cho phép bạn dễ dàng nhúng (đệ quy) tải xuống ứng dụng của riêng bạn.
Để trả lời câu hỏi của bạn:
mget --num-threads=4 [url]
CẬP NHẬT
Mget hiện được phát triển dưới dạng Wget2 với nhiều lỗi được sửa và nhiều tính năng hơn (ví dụ: hỗ trợ HTTP / 2).
--num-threads
tại là --max-threads
.
Tôi đề nghị sử dụng omerack.
Ví dụ: httrack -v -w http://example.com/
Nó sẽ làm một tấm gương với 8 kết nối đồng thời như mặc định. Httrack có rất nhiều tùy chọn để chơi. Có một cái nhìn.
Như các áp phích khác đã đề cập, tôi khuyên bạn nên xem aria2 . Từ trang man Ubuntu cho phiên bản 1.16.1:
aria2 là một tiện ích để tải tập tin. Các giao thức được hỗ trợ là HTTP (S), FTP, BitTorrent và Metalink. aria2 có thể tải xuống một tệp từ nhiều nguồn / giao thức và cố gắng sử dụng băng thông tải xuống tối đa của bạn. Nó hỗ trợ tải xuống một tệp từ HTTP (S) / FTP và BitTorrent cùng một lúc, trong khi dữ liệu được tải xuống từ HTTP (S) / FTP được tải lên bầy BitTorrent. Sử dụng tổng kiểm tra khối của Metalink, aria2 tự động xác thực các khối dữ liệu trong khi tải xuống một tệp như BitTorrent.
Bạn có thể sử dụng -x
cờ để chỉ định số lượng kết nối tối đa cho mỗi máy chủ (mặc định: 1):
aria2c -x 16 [url]
Nếu cùng một tệp có sẵn từ nhiều vị trí, bạn có thể chọn tải xuống từ tất cả chúng. Sử dụng -j
cờ để chỉ định số lượng tải xuống song song tối đa cho mỗi URI tĩnh (mặc định: 5).
aria2c -j 5 [url] [url2]
Hãy xem http://aria2.sourceforge.net/ để biết thêm thông tin. Đối với thông tin sử dụng, trang man thực sự mô tả và có một phần ở phía dưới với các ví dụ sử dụng. Có thể tìm thấy phiên bản trực tuyến tại http://aria2.sourceforge.net/manual/en/html/README.html .
wget không thể tải xuống trong nhiều kết nối, thay vào đó bạn có thể thử sử dụng chương trình khác như aria2.
thử pcurl
http://sourceforge.net/projects/pcurl/
sử dụng curl thay vì wget, tải xuống trong 10 phân đoạn song song.
sử dụng
aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &
trong website.txt đặt 1 url trên mỗi dòng, ví dụ:
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
Họ luôn luôn nói nó phụ thuộc nhưng khi nói đến việc phản ánh một trang web tốt nhất tồn tại httrack . Nó là siêu nhanh và dễ dàng để làm việc. Nhược điểm duy nhất là nó được gọi là diễn đàn hỗ trợ nhưng bạn có thể tìm đường bằng tài liệu chính thức . Nó có cả giao diện GUI và CLI và nó Hỗ trợ cookie chỉ cần đọc tài liệu Đây là cách tốt nhất. (Hãy cẩn thận với công cụ này, bạn có thể tải xuống toàn bộ web trên ổ cứng của mình)
httrack -c8 [url]
Theo mặc định, số lượng kết nối đồng thời tối đa là 8 để tránh quá tải máy chủ
sử dụng xargs
để làm wget
việc trong nhiều tệp song song
#!/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
Tùy chọn Aria2, Cách làm việc đúng với tệp nhỏ hơn 20mb
aria2c -k 2M -x 10 -s 10 [url]
-k 2M
chia tập tin thành 2mb chunk
-k
hoặc --min-split-size
có giá trị mặc định là 20mb, nếu bạn không đặt tùy chọn này và tệp dưới 20mb, nó sẽ chỉ chạy trong một kết nối duy nhất cho dù giá trị của -x
hoặc-s
make
có thể được song song dễ dàng (ví dụ, make -j 4
). Ví dụ: đây là một cách đơn giản Makefile
mà tôi đang sử dụng để tải xuống các tệp song song bằng 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)/$@
.PHONY: all
default: all
Xem xét sử dụng Biểu thức thông thường hoặc Globbing FTP . Do đó, bạn có thể bắt đầu wget nhiều lần với các nhóm ký tự bắt đầu tên tệp khác nhau tùy thuộc vào tần suất xuất hiện của chúng.
Đây là ví dụ về cách tôi đồng bộ hóa một thư mục giữa hai NAS:
wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.10 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[0-9a-hA-H]*" --directory-prefix=/volume1/foo &
wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.11 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[!0-9a-hA-H]*" --directory-prefix=/volume1/foo &
Wget đầu tiên đồng bộ tất cả các tệp / thư mục bắt đầu 0, 1, 2... F, G, H
và luồng thứ hai đồng bộ hóa mọi thứ khác.
Đây là cách dễ nhất để đồng bộ giữa một NAS với một cổng ethernet 10G (10.0.0.100) và một NAS với hai cổng ethernet 1G (10.0.0.10 và 10.0.0.11). Tôi ràng buộc hai luồng wget thông qua --bind-address
các cổng ethernet khác nhau và gọi chúng song song bằng cách đặt &
ở cuối mỗi dòng. Bằng cách đó, tôi đã có thể sao chép các tệp khổng lồ với tổng số 2x 100 MB / s = 200 MB / s.