วิธี: ดาวน์โหลดหน้าจากเครื่อง 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.