รับไฟล์ทั้งหมดจากหน้าเว็บโดยใช้ curl


86

ฉันต้องการดาวน์โหลดไฟล์ทั้งหมดในครั้งเดียวจากหน้าต่อไปนี้โดยใช้curl: http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

ฉันลองcurl http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/แล้วมันคืนบรรทัดจำนวนหนึ่งในเทอร์มินัล แต่ไม่ได้รับไฟล์ใด ๆ

คำตอบ:


125

ใช้wgetแทน คุณสามารถติดตั้งได้brew install wgetหากคุณติดตั้ง Homebrew หรือsudo port install wgetหากคุณติดตั้ง MacPorts

สำหรับการดาวน์โหลดไฟล์จากรายการไดเรกทอรีให้ใช้-r(เรียกซ้ำ), -np(ไม่ติดตามลิงก์ไปยังไดเรกทอรีหลัก) และ-kสร้างลิงก์ใน HTML หรือ CSS ที่ดาวน์โหลดชี้ไปที่ไฟล์ในเครื่อง (credit @xaccrocheur)

wget -r -np -k http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

ตัวเลือกที่มีประโยชน์อื่น ๆ :

  • -nd (ไม่มีไดเรกทอรี): ดาวน์โหลดไฟล์ทั้งหมดไปยังไดเรกทอรีปัจจุบัน
  • -e robots.off: ละเว้นไฟล์ robots.txt อย่าดาวน์โหลดไฟล์ robots.txt
  • -A png,jpg: ยอมรับเฉพาะไฟล์ที่มีนามสกุลpngหรือjpg
  • -m (กระจกเงา): -r --timestamping --level inf --no-remove-listing
  • -nc, --no-clobber: ข้ามการดาวน์โหลดหากมีไฟล์อยู่

3
wget -r -np -k http://your.website.com/specific/directory. เคล็ดลับคือการใช้-kการแปลงลิงก์ (ภาพ ฯลฯ ) สำหรับการดูในท้องถิ่น
yPhil

brewและportไม่ทำงานสำหรับฉันที่จะติดตั้ง wget ฉันควรทำอย่างไร?
โฮสติ

@HoseynHeydari: คุณสามารถใช้ rudix.org เพื่อรวบรวมไบนารีสำหรับ osx ดังนั้นคุณต้องติดตั้ง rudix แล้วใช้: sudo rudix install wget
Mamonu

ตัวเลือก-kไม่ทำงานเสมอ เช่นหากคุณมีลิงก์สองลิงก์ชี้ไปที่ไฟล์เดียวกันบนหน้าเว็บที่คุณพยายามจับภาพซ้ำ ๆwgetดูเหมือนว่าจะแปลงลิงค์ของอินสแตนซ์แรก แต่ไม่ใช่ลิงก์ที่สอง
Kun

22

curlสามารถอ่านไฟล์หน้าเว็บเพียงไฟล์เดียวกลุ่มของบรรทัดที่คุณได้รับนั้นเป็นดัชนีไดเรกทอรี (ซึ่งคุณเห็นในเบราว์เซอร์ของคุณหากคุณไปที่ URL นั้น) หากต้องการใช้curlและเครื่องมือ Unix บางอย่างที่สามารถใช้งานไฟล์ต่างๆที่คุณต้องการ

for file in $(curl -s http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/ |
                  grep href |
                  sed 's/.*href="//' |
                  sed 's/".*//' |
                  grep '^[a-zA-Z].*'); do
    curl -s -O http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/$file
done

ซึ่งจะรับไฟล์ทั้งหมดลงในไดเรกทอรีปัจจุบัน

สำหรับความต้องการที่ละเอียดมากขึ้น (รวมถึงการรับไฟล์จำนวนมากจากไซต์ที่มีโฟลเดอร์ / ไดเรกทอรี) wget(ตามที่เสนอในคำตอบอื่นแล้ว) เป็นตัวเลือกที่ดีกว่า


ขอขอบคุณ. นี่เป็นทางออกที่ดีและให้ตัวอย่างการทำงานที่ยอดเยี่ยม!
egelev

1
xmllint --html --xpath '//a/@href'grepน่าจะเป็นตัวแยกวิเคราะห์ดีกว่า
ceving

7

Ref: http://blog.incognitech.in/download-files-from-apache-server-listing-directory/

คุณสามารถใช้คำสั่งต่อไปนี้:

wget --execute="robots = off" --mirror --convert-links --no-parent --wait=5 <website-url>

คำอธิบายของแต่ละตัวเลือก

  • wget: คำสั่งง่าย ๆ เพื่อทำการร้องขอ CURL และดาวน์โหลดไฟล์ระยะไกลไปยังเครื่องท้องถิ่นของเรา
  • --execute="robots = off": การดำเนินการนี้จะไม่สนใจไฟล์ robots.txt ขณะคลานผ่านหน้าต่างๆ มันจะมีประโยชน์ถ้าคุณไม่ได้รับไฟล์ทั้งหมด
  • --mirror: ตัวเลือกนี้จะสะท้อนโครงสร้างไดเรกทอรีสำหรับ URL ที่กำหนดโดยทั่วไป มันเป็นทางลัด-N -r -l inf --no-remove-listingที่หมายถึง:
    • -N: อย่าเรียกไฟล์ซ้ำเว้นแต่ใหม่กว่าในเครื่อง
    • -r: ระบุการดาวน์โหลดแบบเรียกซ้ำ
    • -l inf: ความลึกสูงสุดของการเรียกซ้ำ (inf หรือ 0 สำหรับอนันต์)
    • --no-remove-listing: อย่าลบไฟล์ '.listing'
  • --convert-links: สร้างลิงก์ใน HTML หรือ CSS ที่ดาวน์โหลดชี้ไปที่ไฟล์ในเครื่อง
  • --no-parent: ไม่ต้องขึ้นไปที่ไดเรกทอรีหลัก
  • --wait=5: รอ 5 วินาทีระหว่างการดึงข้อมูล เพื่อที่เราจะได้ไม่ทารุณเซิร์ฟเวอร์
  • <website-url>: นี่คือเว็บไซต์ที่จะดาวน์โหลดไฟล์

Happy Downloading: smiley:


3

คุณสามารถใช้httrackสำหรับ Windows / MacOS และติดตั้งผ่าน Homebrew


มีอะไรใหม่สำหรับฉันขอบคุณ ดีที่สุดคือเร็วและเร็ว: สายเดียว เพียงแค่ตัดไขมันและหลีกเลี่ยงขยะทั้งหมด
Peter Teoh

0

สำหรับพวกเราที่ต้องการใช้แอพพลิเคชั่นที่มี GUI มีโปรแกรมแชร์แวร์ราคาไม่แพงอย่างDeepVacuum สำหรับ Mac OS Xซึ่งใช้งานได้ง่ายwgetในรูปแบบที่ใช้งานง่ายพร้อมรายการตั้งค่าล่วงหน้าที่สามารถจัดการงานที่จำเป็นได้โดยทั่วไป คุณยังสามารถบันทึกการกำหนดค่าแบบกำหนดเองของคุณเองเป็นค่าล่วงหน้าได้

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.