CURL เพื่อดาวน์โหลดไดเรกทอรี


38

ฉันกำลังพยายามดาวน์โหลดไดเรกทอรีเว็บไซต์แบบเต็มโดยใช้ CURL คำสั่งต่อไปนี้ไม่ทำงาน:

curl -LO http://example.com/

ส่งคืนข้อผิดพลาด: curl: Remote file name has no length!.

แต่เมื่อฉันทำสิ่งนี้curl -LO http://example.com/someFile.typeมันได้ผล มีความคิดวิธีการดาวน์โหลดไฟล์ทั้งหมดในไดเรกทอรีที่ระบุหรือไม่? ขอบคุณ

คำตอบ:


33

ใช้งานได้ดีสำหรับฉันเสมอไม่มีผู้ปกครองและเรียกซ้ำเพื่อให้ได้ไดเรกทอรีที่ต้องการเท่านั้น

 wget --no-parent -r http://WEBSITE.com/DIRECTORY

1
นี่ควรเป็นคำตอบที่ยอมรับได้
Juan Jimenez

กำลังพยายามดาวน์โหลดโฟลเดอร์จากคอมไพล์ ฉันพยายามwget --no-parent -r http://WEBSITE.com/DIRECTORYและไม่ใช้--no-parent- ไม่ทำงาน
Sam-T

32

HTTP ไม่ได้มีความคิดของไดเรกทอรีจริงๆ เครื่องหมายทับที่ไม่ใช่สามข้อแรก ( http://example.com/) ไม่มีความหมายพิเศษใด ๆ ยกเว้นที่เกี่ยวข้องกับ..ใน URL สัมพัทธ์ ดังนั้นหากเซิร์ฟเวอร์ตามรูปแบบเฉพาะไม่มีวิธีการ "ดาวน์โหลดไฟล์ทั้งหมดในไดเรกทอรีที่ระบุ"

หากคุณต้องการดาวน์โหลดทั้งไซต์ทางออกที่ดีที่สุดของคุณคือสำรวจลิงค์ทั้งหมดในหน้าหลักซ้ำ ๆ Curl ไม่สามารถทำได้ แต่สามารถทำได้ สิ่งนี้จะใช้งานได้หากเว็บไซต์ไม่ได้มีการเปลี่ยนแปลงมากเกินไป (โดยเฉพาะอย่างยิ่ง wget จะไม่เห็นลิงก์ที่สร้างขึ้นด้วยรหัส Javascript) เริ่มต้นด้วยwget -r http://example.com/และดูภายใต้“ ตัวเลือกการเรียกซ้ำแบบเรียกซ้ำ” และ“ ตัวเลือกการยอมรับ / ปฏิเสธแบบเรียกซ้ำ” ในคู่มือ wget เพื่อดูตัวเลือกที่เกี่ยวข้องเพิ่มเติม (ความลึกแบบเรียกซ้ำรายการการยกเว้นเป็นต้น)

หากเว็บไซต์พยายามบล็อกการดาวน์โหลดอัตโนมัติคุณอาจต้องเปลี่ยนสตริงตัวแทนผู้ใช้ ( -U Mozilla) และละเว้นrobots.txt(สร้างไฟล์ว่างexample.com/robots.txtและใช้-ncตัวเลือกเพื่อไม่ให้พยายามดาวน์โหลดจากเซิร์ฟเวอร์)


วิธีที่ wget สามารถทำได้ ??
Srikan

@Srikan แยกวิเคราะห์ HTML เพื่อค้นหาลิงก์ที่มีและดาวน์โหลดซ้ำ (การเลือก) ลิงก์เหล่านั้น
Gilles 'หยุดความชั่วร้าย'

หากไฟล์ไม่มีลิงก์ภายในแสดงว่าการดาวน์โหลดแบบเรียกซ้ำไม่สามารถรับไฟล์ทั้งหมดได้ ให้บอกว่ามีโฟลเดอร์ HTTP ของไฟล์ txt บางไฟล์ จะประสบความสำเร็จในการรับไฟล์ทั้งหมด ให้ฉันลองมันหลังจากความคิดเห็นนี้
Srikan

@Srikan HTTP ไม่มีแนวคิดของไดเรกทอรี การดาวน์โหลดแบบเรียกซ้ำหมายถึงการติดตามลิงก์ในหน้าเว็บ (รวมถึงหน้าเว็บที่สร้างโดยเซิร์ฟเวอร์เพื่อแสดงรายการไดเรกทอรีหากเว็บเซิร์ฟเวอร์ทำสิ่งนี้ )
Gilles 'หยุดความชั่วร้าย'

สนับสนุน wget ละเลย robots.txt -e robots=offกับธง -R "robots.txt"หรือคุณสามารถหลีกเลี่ยงการดาวน์โหลดได้โดยปฏิเสธมันด้วย
Ryan Krage

17

ในกรณีcurlนี้ไม่ใช่เครื่องมือที่ดีที่สุด คุณสามารถใช้wgetกับ-rอาร์กิวเมนต์เช่นนี้

wget -r http://example.com/ 

นี่เป็นรูปแบบพื้นฐานที่สุดและคุณสามารถใช้อาร์กิวเมนต์เพิ่มเติมได้เช่นกัน สำหรับข้อมูลเพิ่มเติมโปรดดูที่manpage( man wget)


5

มันเป็นไปไม่ได้ ไม่มีมาตรฐานวิธีการทั่วไปสำหรับเว็บเซิร์ฟเวอร์เพื่อส่งคืนเนื้อหาของไดเรกทอรีให้คุณ เซิร์ฟเวอร์ส่วนใหญ่สร้างดัชนี HTML ของไดเรกทอรีหากกำหนดค่าให้ทำเช่นนั้น แต่ผลลัพธ์นี้ไม่ได้มาตรฐานหรือรับประกันโดยวิธีการใด ๆ คุณสามารถแยกวิเคราะห์ HTML นี้ได้ แต่โปรดจำไว้ว่ารูปแบบจะเปลี่ยนจากเซิร์ฟเวอร์เป็นเซิร์ฟเวอร์และจะไม่เปิดใช้งานเสมอ


ดูที่แอพนี้ชื่อว่า Site Sucker sitesucker.us พวกเขาทำมันได้อย่างไร?
ฟู

พวกเขาแยกวิเคราะห์ไฟล์ HTML และดาวน์โหลดทุกลิงก์ในนั้น
แบรด

ใช้งานwgetหรือcurl?
ฟู

7
@Brad: curl ไม่ได้แยกวิเคราะห์ HTML แต่ wget ทำสิ่งนี้อย่างแม่นยำ (เรียกว่าการเรียกซ้ำ)
Gilles 'หยุดความชั่วร้าย'

1
อืมฉันยืนถูกต้องแล้ว! gnu.org/software/wget/manual/html_node/ ...... OP ควรทราบว่าสิ่งนี้ยังไม่ได้รับสิ่งที่เขากำลังมองหา ... มันจะติดตามเฉพาะลิงค์ที่มีอยู่ในหน้าเว็บที่ส่งคืน
แบรด

2

คุณสามารถใช้ส่วนขยาย Firefox DownThemAll! มันจะช่วยให้คุณดาวน์โหลดไฟล์ทั้งหมดในไดเรกทอรีในคลิกเดียว นอกจากนี้ยังสามารถปรับแต่งได้และคุณสามารถระบุประเภทไฟล์ที่จะดาวน์โหลด นี่เป็นวิธีที่ง่ายที่สุดที่ฉันค้นพบ


0

คุณอาจพบการใช้งานสำหรับ ripper เว็บไซต์ที่นี่จะดาวน์โหลดทุกอย่างและแก้ไขเนื้อหา / ลิงค์ภายในสำหรับใช้ในท้องถิ่น คนดีสามารถพบได้ที่นี่: http://www.httrack.com

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