วิธี: ดาวน์โหลดหน้าจากเครื่อง Wayback ในช่วงเวลาที่กำหนด


11

สิ่งที่ฉันหมายถึงคือการดาวน์โหลดแต่ละหน้าพร้อมใช้งานจากเครื่อง Wayback ในช่วงเวลาและช่วงเวลาที่ระบุ ตัวอย่างเช่นฉันต้องการดาวน์โหลดแต่ละหน้าพร้อมใช้งานจากแต่ละวันจาก nature.com จากมกราคม 2012 ถึงธันวาคม 2012 (ไม่แม่นยำว่าฉันต้องการทำอะไร แต่ใกล้พอ - และเป็นตัวอย่างที่ดี)

wget จะไม่ทำงานเนื่องจากลักษณะเฉพาะของวิธีการทำงานของเครื่อง Wayback โชคไม่ดี

เครื่องมือเช่นเครื่องมือดาวน์โหลด Wayback Machine จะดาวน์โหลดเฉพาะเวอร์ชันล่าสุดของหน้าเว็บเท่านั้น

การโต้ตอบกับ IA API ดูเหมือนว่าเป็นเส้นทางที่ทำงานได้ แต่ฉันไม่แน่ใจว่ามันจะทำงานอย่างไร

ขอบคุณ!


แน่นอนคุณจะต้องเขียนสคริปต์สำหรับสิ่งนี้ อาจจะขด
— PulseJet

ฉันคิดว่ามันเป็นไปได้ที่จะเขียนสคริปต์และพึ่งพา cURL แต่ฉันไม่คุ้นเคยกับ Memento API ที่ Internet Archive ใช้และไม่คิดว่าฉันเคยเห็นมันมาใช้ในวิธีนี้
— orlando marinella

ฉันต้องก) ทำหลายไซต์พร้อมกันข) คว้าสแนปชอตของแต่ละไซต์ในช่วงเวลาที่ยาวนาน (เช่น 1998 ถึง 2001) และ c) สามารถระบุจำนวนสแน็ปช็อตที่ฉันต้องการใช้ในช่วงเวลานั้น
— orlando marinella

สำเนาซ้ำที่เป็นไปได้: superuser.com/questions/828907/…
— PulseJet

ปัญหาเดียวกัน. พวกเขาต้องการเพียงหนึ่งหน้าดูเหมือนว่า - เอกสารสำหรับเครื่องดาวน์โหลด WB Machine นั้นคลุมเครือไม่ว่าจะทำงานในช่วงเวลาเช่นนั้นหรือไม่
— orlando marinella

คำตอบ:


5

วิธีwaybackจัดรูปแบบ URL มีดังนี้:

http://$BASEURL/$TIMESTAMP/$TARGET

นี่BASEURLคือปกติhttp://web.archive.org/web(ฉันพูดตามปกติเพราะฉันไม่แน่ใจว่าเป็น BASEURL เพียงแห่งเดียว)

TARGETอธิบายตนเอง (ในกรณีของคุณhttp://nature.comหรือ URL ที่คล้ายกัน)

TIMESTAMPคือYYYYmmddHHMMssเมื่อมีการจับภาพ (ใน UTC):

  • YYYY: ปี
  • mm: เดือน (2 หลัก - 01 ถึง 12)
  • dd: วันของเดือน (2 หลัก - 01 ถึง 31)
  • HH: ชั่วโมง (2 หลัก - 00 ถึง 23)
  • MM: นาที (2 หลัก - 00 ถึง 59)
  • ss: ที่สอง (2 หลัก - 00 ถึง 59)

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

คุณสามารถใช้คุณสมบัตินั้นเพื่อรับ URL รายวันโดยใช้curl -I(HTTP HEAD) เพื่อรับชุด URL:

BASEURL='http://web.archive.org/web'
TARGET="SET_THIS"
START=1325419200 # Jan 1 2012 12:00:00 UTC (Noon) 
END=1356998400 # Tue Jan  1 00:00:00 UTC 2013
if uname -s |grep -q 'Darwin' ; then
    DATECMD="date -u '+%Y%m%d%H%M%S' -r "
elif uname -s |grep -q 'Linux'; then
    DATECMD="date -u +%Y%m%d%H%M%S -d @"
fi


while [[ $START -lt $END ]]; do
    TIMESTAMP=$(${DATECMD}$START)
    REDIRECT="$(curl -sI "$BASEURL/$TIMESTAMP/$TARGET" |awk '/^Location/ {print $2}')"
    if [[ -z "$REDIRECT" ]]; then
        echo "$BASEURL/$TIMESTAMP/$TARGET"
    else
        echo $REDIRECT
    fi
    START=$((START + 86400)) # add 24 hours
done

สิ่งนี้ทำให้คุณได้รับ URL ที่ใกล้เคียงที่สุดในตอนเที่ยงของแต่ละวันของปี 2012 เพียงแค่ลบสิ่งที่ซ้ำกันออกและและดาวน์โหลดหน้าต่างๆ

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


มันเยี่ยมมากทำไม เพราะเรามีข้อเท็จจริงและข้อพิสูจน์ว่าเมื่อใครบางคนเก็บเนื้อหาและ web.archive.org ได้ลบเนื้อหาที่เก็บถาวรในอดีต สคริปต์นี้ด้านบนจะบันทึกเนื้อหาที่เก็บถาวร น่ากลัว
— DeerSpotter

มันดาวน์โหลดได้เฉพาะไฟล์หลักเท่านั้นและไม่เกี่ยวข้อง js, html, css
— วัตถุประสงค์

ที่จริงแล้วสคริปต์นี้ไม่ได้ดาวน์โหลดอะไรเลย : มันแค่แสดง URL ที่ใกล้ที่สุด คุณสามารถเสียบ URL นั้นwgetหรือpage-getterตัวเลือกอื่น ๆด้วยตัวเลือกที่ถูกต้อง (แจ้งให้ทราบถึง-Iตัวเลือกcurl)
— Samveen

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