ดาวน์โหลดแบบเรียกซ้ำ แต่ฉันไม่ต้องการติดตามทุกลิงก์


10

ฉันพยายามทำเว็บไซต์โดยใช้ wget แต่ฉันไม่ต้องการดาวน์โหลดไฟล์จำนวนมากดังนั้นฉันจึงใช้--rejectตัวเลือกของ wget เพื่อไม่บันทึกไฟล์ทั้งหมด อย่างไรก็ตาม wget จะยังคงดาวน์โหลดไฟล์ทั้งหมดแล้วลบไฟล์ในภายหลังหากตรงกับตัวเลือกการปฏิเสธของฉัน

มีวิธีบอกไม่ให้ติดตามลิงค์บางอย่างถ้ามันตรงกับสัญลักษณ์ตัวแทนเชลล์หรือไม่? หาก wget ไม่สามารถทำได้มีคำสั่ง linux ทั่วไปอื่น ๆ ที่สามารถทำได้หรือไม่


3
กรุณาโพสต์คำสั่งทั้งหมดของคุณ มันทำให้การแก้ไขปัญหาง่ายขึ้นมาก
โจเซฟ Kern

คำตอบ:


9

คุณอาจลองใช้HTTrackซึ่งมี IMO ยืดหยุ่นและใช้งานง่ายรวมถึง / ไม่รวมตรรกะ บางสิ่งเช่นนี้ ...

httrack "https://example.com" -O ExampleMirrorDirectory \
"-*" \
"+https://example.com/images/*" \
"-*.swf"

กฎจะถูกนำไปใช้ตามลำดับและจะแทนที่กฎก่อนหน้า ...

  1. ไม่รวมทุกอย่าง
  2. แต่รวมถึงhttps://example.com/images/ *
  3. แต่ไม่รวมสิ่งที่ลงท้ายด้วย swf

มันจะดาวน์โหลด CSS, รูปภาพ ฯลฯ ด้วย URL ที่อัปเดตหรือไม่
brandizzi


1

ใต้ส่วน --reject ของ 'man wget':

"โปรดทราบว่าหากอักขระไวด์การ์ดใด ๆ , *,?, [หรือ] ปรากฏในองค์ประกอบของ acclist หรือ rejlist มันจะถูกใช้เป็นรูปแบบแทนที่จะเป็นคำต่อท้าย"

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

นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณใส่รายการนี้ในเครื่องหมายอัญประกาศดังนั้นเชลล์จะไม่ขยายอักขระตัวแทนเหล่านั้นก่อนส่งอาร์กิวเมนต์ให้ wget

แม้ว่าระบบของคุณไม่ได้มีรุ่น 1.12 อ่านประเภทของไฟล์ส่วนของคู่มือการใช้งานที่นี่ จากบันทึกการเปลี่ยนแปลงผู้ดูแลระบบได้เพิ่มคำเตือน:

* NEWS: Added documentation change re: --no-parents, and various
caveats on accept/reject lists behavior. Rearranged some items in
order of priority.

- ตัวเลือกการปฏิเสธอยู่ในเครื่องหมายคำพูด ฉันจะเห็นว่ามีการจับคู่ไฟล์ที่ถูกต้องเพราะหลังจากดาวน์โหลดไฟล์ wget ลบไฟล์ ผมแค่อยากจะหยุดมันได้ดาวน์โหลดไฟล์ในสถานที่แรก
Rory

เป็นไฟล์ htm (l) เหล่านี้หรือไม่ ตามคู่มือเหล่านี้จะถูกดาวน์โหลดไม่ว่าจะเกิดอะไรขึ้น
Kyle Brandt

ใช่. ไฟล์ที่ฉันต้องการปฏิเสธเป็นไฟล์ HTML ฉันรู้ว่าพวกเขากำลังดาวน์โหลดไม่ว่าอะไรจะเกิดขึ้น มีวิธีป้องกันไหม
Rory

1

คุณสามารถ จำกัด ระดับการเรียกซ้ำด้วย-l NUMBERตัวเลือกหากสิ่งนั้นช่วยได้ (ไม่ใช่รูปแบบ regex ที่แน่นอน)

ระดับของ "2" จะดาวน์โหลด index.html ไซต์ย่อย / images / etc และลิงก์ในไซต์ย่อย


ไม่ว่าจะไม่ช่วยเหลือในกรณีนี้
Rory

1

คุณใช้ wget อย่างไร ลองใช้วิธีนี้:

wget -r --reject=gif,jpg,swf http://norc.aut.ac.ir/

คำสั่งนี้จะไม่สนใจไฟล์ gif และ jpg และ swf


ไฟล์ที่ Rory McCann ต้องการที่จะปฏิเสธคือไฟล์ HTML แต่เขาต้องการเก็บไฟล์ HTML อื่น ๆ ดังนั้นไวยากรณ์นี้จึงไม่สามารถนำไปใช้กับคำถามของเขาได้
Royce Williams

1

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

wget จะดาวน์โหลดและลบไฟล์ที่ตรงกับรูปแบบ -R สามารถจับคู่รูปแบบได้เช่นกันไม่ใช่เฉพาะส่วนขยายหรือบางส่วนของชื่อไฟล์ อย่างไรก็ตามจะไม่หยุดโหลดจากการดาวน์โหลดก่อนและลบในภายหลัง

httrack มีคุณสมบัติที่ดีบางอย่าง แต่จากประสบการณ์ของฉันวิธีบันทึก "ไฟล์" อาจเป็นเรื่องแปลกเล็กน้อยเช่นถ้า httrack เจอ index.asp? Type = BASIC & PAGEID = 2234234
มันสามารถบันทึกได้ แต่คุณต้องบอกให้รักษา บางส่วนของข้อความค้นหา
เช่น% h% p /% n% [TYPE: @TYPE = ::]% [PAGEID: PAGEID = ::].% t
@ เป็นตัวยึดตำแหน่งสำหรับเครื่องหมายคำถามคุณสามารถเปลี่ยนชื่อไฟล์ได้ในภายหลัง หรืออาจหนีเครื่องหมายคำถามแทน ปัญหาคือ.% t จะเพิ่ม '.html' ที่ส่วนท้ายของ URI ของคุณซึ่งเดิมไม่มี '.html' และถ้าคุณถอดมันออกรูปภาพที่การดาวน์โหลด httrack จะไม่มีนามสกุลไฟล์

ดีกว่าที่จะใช้ wget IMHO

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