Tải xuống nhiều URL cùng một lúc


7

Tôi biết đó wget -ilà một cách để tải xuống danh sách các URL. Rắc rối duy nhất là tôi cần truyền một số dữ liệu POST khác nhau cho từng dữ liệu, hoạt động cho các url đơn bằng cách sử dụng wget --post-data=nhưng không phải cho danh sách.

Tôi đang mở cho bất kỳ trình tải xuống CLI nào, hoặc thậm chí một cái gì đó trong JS hoặc Python. Tuy nhiên, tôi muốn nhận một thanh tiến trình cho mỗi lần tải xuống hoặc tệp nhật ký được cập nhật mỗi khi dl kết thúc hoặc một số cách khác để biết khi nào dl kết thúc.


Mỗi URL có một POST khác nhau hoặc tất cả chúng đều giống nhau?
slm

Nhiều phương thức được hiển thị ở đây: stackoverflow.com/questions/8634109/ từ
slm

Câu trả lời:


3

Nếu bạn đã có một danh sách các URL, chỉ cần thêm dữ liệu POST vào danh sách đó. Cái gì đó như:

www.example.com    postdata1
www.foo.com
www.bar.com       second_post_data

Sau đó, thay vì sử dụng -i, hãy đọc tệp trong vòng lặp bash và truyền dữ liệu cho wget:

while read url post; do wget --post-data="$post" $url; done < list.txt

Để chạy chúng song song để nhiều tệp được tải xuống cùng một lúc, hãy sử dụng &thay vì ;. Mặc dù cẩn thận, điều này sẽ khởi chạy một wgetquy trình riêng cho mỗi URL.

while read url post; do wget --post-data="$post" $url & done < list.txt

Một mẹo tôi sử dụng để khởi chạy loại điều này là theo dõi số lượng hiện đang chạy và chỉ chạy tiếp theo nếu số dưới ngưỡng, 10 chẳng hạn:

while read url post; do 
 while [[ "$(pgrep -fc wget)" -gt 9 && $c -gt 10 ]]; do sleep 1; done; 
 ((c++));  
 echo "Launching $url ($c)"; 
 wget --post-data="$post" $url >/dev/null 2>&1 && echo "$c finsihed" & 
done < list.txt

Điều đó sẽ khởi chạy 10 URL đầu tiên, sau đó đợi một URL kết thúc và khởi chạy tiếp theo.


2

Bạn có thể xác định tệp CSV được phân tách như định dạng này (ví dụ):

URL1;POSTDATA1
URL2;POSTDATA2
...

và phân tích cú pháp bằng awklệnh:

awk -F\; '{print "wget -i "$1" --post-data="$2}' your_CSV_file

2

Tôi chưa từng sử dụng công cụ này trước đây nhưng nghĩ rằng tôi đã thêm nó vì nó nghe giống hệt những gì bạn đang tìm kiếm.

xấu xí

Đó là một công cụ GUI được gọi là uget. Nó có khả năng lấy một tệp đầu vào có chứa các URL để tải xuống cùng với dữ liệu HTTP POST từ tệp thứ hai. Không rõ liệu điều này có cho phép bạn sử dụng dữ liệu POST khác nhau cho mỗi URL hay nếu đó chỉ là một bộ duy nhất cho tất cả các URL nhưng có thể đáng để xem xét kỹ hơn.

$ uget-gtk --help
...
  -i, --input-file=FILE         add URLs found in FILE.
  --http-post-data=STRING       use the POST method; send STRING as the data.
  --http-post-file=FILE         use the POST method; send contents of FILE
ảnh chụp màn hình

ss # 1

ss # 2

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.