ฉันใช้ wget เพื่อดาวน์โหลดเนื้อหาเว็บไซต์ แต่ wget ดาวน์โหลดไฟล์ทีละไฟล์
ฉันจะทำการดาวน์โหลด wget โดยใช้การเชื่อมต่อ 4 พร้อมกันได้อย่างไร
ฉันใช้ wget เพื่อดาวน์โหลดเนื้อหาเว็บไซต์ แต่ wget ดาวน์โหลดไฟล์ทีละไฟล์
ฉันจะทำการดาวน์โหลด wget โดยใช้การเชื่อมต่อ 4 พร้อมกันได้อย่างไร
คำตอบ:
ใช้ aria2:
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
ฉันรักมัน !!
-s
ระบุจำนวนของการแบ่งและ-k
เพื่อระบุขนาดขั้นต่ำต่อกลุ่มแยก - มิฉะนั้นคุณอาจไม่เคยถึงการ-x
เชื่อมต่อสูงสุด
Wget ไม่รองรับการเชื่อมต่อซ็อกเก็ตหลายตัวเพื่อเร่งความเร็วในการดาวน์โหลดไฟล์
ฉันคิดว่าเราสามารถทำได้ดีกว่าคำตอบ gmarian เล็กน้อย
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
และ-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
และทำงานได้ดีสำหรับฉัน (เซิร์ฟเวอร์ที่มีขีด จำกัด 100k ต่อการเชื่อมต่อให้ฉันดาวน์โหลดที่ 400k ด้วยพารามิเตอร์ที่กล่าวไว้)
aria2
ไม่ไม่สนับสนุนการดาวน์โหลด HTTP recursive ทำให้มันทดแทนถึงขนาดสำหรับwget
ถ้า-r
เป็นที่ต้องการ
ตั้งแต่ GNU ขนานยังไม่ได้กล่าวถึงให้ฉันให้วิธีอื่น:
cat url.list | parallel -j 8 wget -O {#}.html {}
cat
แต่ ในบริบทที่ จำกัด นี้มันค่อนข้างไม่เป็นอันตราย แต่บางทีคุณอาจไม่ต้องการที่จะทำลายล้างศัตรู
ฉันพบ วิธีแก้ปัญหา
ในขั้นตอนการดาวน์โหลดไฟล์บันทึกสองสามพันไฟล์จากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์ถัดไปฉันจำเป็นต้องทำการดาวน์โหลดแบบมัลติเธรดที่ร้ายแรงใน 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
ดาวน์โหลดเฉพาะไฟล์ "ที่ใหม่กว่า" ซึ่งหมายความว่ามันจะไม่เขียนทับหรือดาวน์โหลดไฟล์ซ้ำเว้นแต่ว่าการเปลี่ยนแปลงเวลาจะเกิดขึ้นบนเซิร์ฟเวอร์
-nc
ตัวเลือก: "no clobber" - ทำให้การเพิกเฉยไม่สนใจไฟล์ที่ดาวน์โหลดมา (แม้บางส่วน)
wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
มันก็ใช้ได้สำหรับฉันเช่นกัน: น่าเกลียดมาก แต่ก็ใช้งานได้ : P
-b
ธงจะเรียกใช้กระบวนการ wget ในพื้นหลังที่เป็นทางเลือกในการทุบตีคนมี&
การควบคุมงานในตัว STDOUT จะถูกเขียนไปยัง wget-log หาก-o <filename>
ไม่ได้ระบุไว้ ดีสำหรับการเขียนสคริปต์ ดู wget (1) สำหรับรายละเอียดเพิ่มเติม
axel
โปรแกรมที่สามารถทำเช่นนี้ก็คือ
axel -n <NUMBER_OF_CONNECTIONS> URL
สำหรับ baisic HTTP Auth
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
ใหม่ ( แต่ยังไม่ได้รับการปล่อยตัว) เครื่องมือเป็นmget มีตัวเลือกมากมายที่เป็นที่รู้จักจาก Wget และมาพร้อมกับห้องสมุดที่ให้คุณสามารถฝัง (เรียกซ้ำ) การดาวน์โหลดลงในแอปพลิเคชันของคุณเองได้อย่างง่ายดาย
ในการตอบคำถามของคุณ:
mget --num-threads=4 [url]
UPDATE
ตอนนี้ Mget ได้รับการพัฒนาเป็นWget2พร้อมแก้ไขข้อบกพร่องมากมายและคุณสมบัติอื่น ๆ (เช่นการสนับสนุน HTTP / 2)
--num-threads
--max-threads
อยู่ในขณะนี้
ฉันแนะนำอย่างยิ่งให้ใช้ httrack
อดีต: httrack -v -w http://example.com/
มันจะทำมิเรอร์พร้อมกับการเชื่อมต่อ 8 ค่าพร้อมกัน Httrack มีตัวเลือกมากมายให้เล่น ได้ดู
ในฐานะที่เป็นผู้โพสต์อื่น ๆ ได้กล่าวผมขอแนะนำให้คุณมีลักษณะที่aria2 จากหน้า man ของ Ubuntu สำหรับเวอร์ชั่น 1.16.1:
aria2 เป็นเครื่องมือสำหรับการดาวน์โหลดไฟล์ โปรโตคอลที่รองรับคือ HTTP (S), FTP, BitTorrent และ Metalink aria2 สามารถดาวน์โหลดไฟล์จากหลายแหล่ง / โปรโตคอลและพยายามใช้แบนด์วิดท์การดาวน์โหลดสูงสุดของคุณ รองรับการดาวน์โหลดไฟล์จาก HTTP (S) / FTP และ BitTorrent ในเวลาเดียวกันในขณะที่ข้อมูลที่ดาวน์โหลดจาก HTTP (S) / FTP จะถูกอัพโหลดไปยัง BitTorrent ด้วยการใช้ checksum อันเล็กของ Metalink, aria2 จะตรวจสอบความถูกต้องของข้อมูลโดยอัตโนมัติในขณะที่ดาวน์โหลดไฟล์เช่น BitTorrent
คุณสามารถใช้-x
ค่าสถานะเพื่อระบุจำนวนการเชื่อมต่อสูงสุดต่อเซิร์ฟเวอร์ (ค่าเริ่มต้น: 1):
aria2c -x 16 [url]
หากไฟล์เดียวกันพร้อมใช้งานจากหลาย ๆ ที่คุณสามารถเลือกดาวน์โหลดได้จากทั้งหมด ใช้-j
แฟล็กเพื่อระบุจำนวนสูงสุดของการดาวน์โหลดแบบขนานสำหรับ URI สแตติกทุกตัว (ค่าเริ่มต้น: 5)
aria2c -j 5 [url] [url2]
ดูที่http://aria2.sourceforge.net/สำหรับข้อมูลเพิ่มเติม สำหรับข้อมูลการใช้งาน man page นั้นเป็นคำอธิบายจริงๆและมีส่วนที่ด้านล่างพร้อมตัวอย่างการใช้งาน รุ่นออนไลน์สามารถพบได้ที่http://aria2.sourceforge.net/manual/en/html/README.html
wget ไม่สามารถดาวน์โหลดได้ในหลายการเชื่อมต่อ แต่คุณสามารถลองใช้โปรแกรมอื่นเช่น aria2
ใช้
aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &
ในเว็บไซต์.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
พวกเขามักจะบอกว่ามันขึ้นอยู่ แต่เมื่อมันมาถึงมิเรอร์เว็บไซต์ที่ดีที่สุดที่มีอยู่HTTrack มันเร็วและง่ายต่อการทำงาน ข้อเสียเพียงอย่างเดียวคือมันเรียกว่าฟอรั่มการสนับสนุน แต่คุณสามารถหาวิธีของคุณโดยใช้เอกสารที่เป็นทางการ มันมีทั้งอินเตอร์เฟส GUI และ CLI และรองรับคุกกี้ที่เพิ่งอ่านเอกสารนี่เป็นสิ่งที่ดีที่สุด (จงระวังด้วยเครื่องมือนี้คุณสามารถดาวน์โหลดเว็บทั้งหมดบนฮาร์ดไดรฟ์ของคุณ)
httrack -c8 [url]
โดยค่าเริ่มต้นจำนวนสูงสุดของการเชื่อมต่อพร้อมกันจำกัด ที่ 8เพื่อหลีกเลี่ยงการโอเวอร์โหลดเซิร์ฟเวอร์
ใช้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, วิธีที่ถูกต้องในการทำงานกับไฟล์ที่เล็กกว่า 20mb
aria2c -k 2M -x 10 -s 10 [url]
-k 2M
แยกไฟล์ออกเป็นก้อนขนาด 2MB
-k
หรือ--min-split-size
มีค่าเริ่มต้นที่ 20mb หากคุณไม่ได้ตั้งค่าตัวเลือกนี้และไฟล์ที่มีขนาดต่ำกว่า 20mb จะทำงานในการเชื่อมต่อเดียวไม่ว่าจะเป็นค่า-x
ใดหรือ-s
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)/$@
.PHONY: all
default: all
พิจารณาใช้นิพจน์ปกติหรือFTP Globbingglobbing โดยที่คุณสามารถเริ่ม wget หลายครั้งด้วยกลุ่มตัวอักษรเริ่มต้นชื่อไฟล์ที่แตกต่างกันขึ้นอยู่กับความถี่ของการเกิดขึ้น
นี่เป็นตัวอย่างวิธีการซิงค์โฟลเดอร์ระหว่าง 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 แรกจะซิงค์ไฟล์ / โฟลเดอร์ทั้งหมดที่เริ่มต้นด้วย0, 1, 2... F, G, H
และเธรดที่สองจะซิงค์ทุกอย่างอื่น
นี่เป็นวิธีที่ง่ายที่สุดในการซิงค์ระหว่าง NAS กับพอร์ตอีเธอร์เน็ต 10G หนึ่งพอร์ต (10.0.0.100) และ NAS ที่มีพอร์ตอีเธอร์เน็ต 1G สองพอร์ต (10.0.0.10 และ 10.0.0.11) ฉันผูกสอง wget เธรดผ่าน--bind-address
ไปยังพอร์ตอีเธอร์เน็ตที่แตกต่างกันและเรียกมันขนานกันโดยวาง&
ที่จุดสิ้นสุดของแต่ละบรรทัด โดยที่ฉันสามารถคัดลอกไฟล์ขนาดใหญ่ที่มี 2x 100 MB / s = 200 MB / s รวม