บันทึกหน้าเว็บเดียว (พร้อมภาพพื้นหลัง) ด้วย Wget


73

ฉันต้องการใช้ Wget เพื่อบันทึกหน้าเว็บเดียว (ไม่ใช่แบบเรียกซ้ำไม่ใช่ทั้งเว็บไซต์) เพื่อการอ้างอิง คล้ายกับ "เว็บเพจเสร็จสมบูรณ์" ของ Firefox

ปัญหาแรกของฉันคือฉันไม่สามารถรับ Wget เพื่อบันทึกภาพพื้นหลังที่ระบุใน CSS แม้ว่ามันจะบันทึกไฟล์ภาพพื้นหลังฉันไม่คิดว่า --convert-links จะแปลง URL ภาพพื้นหลังในไฟล์ CSS เพื่อชี้ไปยังภาพพื้นหลังที่บันทึกไว้ในเครื่อง Firefox มีปัญหาเดียวกัน

ปัญหาที่สองของฉันคือ: หากมีภาพในหน้าฉันต้องการบันทึกที่โฮสต์บนเซิร์ฟเวอร์อื่น (เช่นโฆษณา) จะไม่รวมเหล่านี้ - ช่วง - โฮสต์ดูเหมือนจะไม่แก้ปัญหาด้วยบรรทัดด้านล่าง

ฉันกำลังใช้: wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories -erobots=off http://domain.tld/webpage.html


1
ตรงบรรทัดเดียวกัน (wget - ไม่มีผู้ปกครอง - หมดเวลา - แปลงลิงค์ - หน้า - requisites - ไม่มีไดเรกทอรี - ไม่มีโฮสต์ - ไดเรกทอรี - ซีโรบอท = ปิด domain.tld) ​​จริง ๆ บันทึกภาพพื้นหลังอ้างอิงจาก CSS หลังจากอัปเดตเป็น 1.12 คู่มือบอกว่า: "ด้วย http urls, Wget จะดึงข้อมูลและแยกวิเคราะห์ html หรือ css จาก url ที่กำหนดการดึงไฟล์ที่เอกสารอ้างถึงผ่านมาร์กอัปเช่น href หรือ src หรือค่า css uri ที่ระบุโดยใช้ฟังก์ชัน 'url ()' สัญกรณ์." ปัญหาที่สองยังคงต้องได้รับการแก้ไข
user14124

คำตอบ:


106

จากหน้าคน Wget :

ที่จริงแล้วเพื่อดาวน์โหลดหน้าเดียวและข้อกำหนดทั้งหมดของมัน (แม้ว่าจะมีอยู่ในเว็บไซต์ที่แยกต่างหาก) และตรวจสอบให้แน่ใจว่าล็อตนั้นแสดงขึ้นอย่างถูกต้องในพื้นที่ผู้เขียนคนนี้ชอบใช้ตัวเลือกเพิ่มเติมนอกเหนือจาก '-p':

wget -E -H -k -K -p http://www.example.com/

นอกจากนี้ในกรณีที่robots.txtคุณไม่อนุญาตให้เพิ่ม-e robots=off


ดูเหมือนว่ามันเป็นเพียงการเขียน js และ css ใหม่ให้กับ URL ที่แน่นอน
Greg Dean

1
ไม่เป็นไรมันเป็น robots.txt ไม่อนุญาตให้ฉันอัปเดตคำตอบด้วยวิธีแก้ปัญหา
Greg Dean

19
ขยาย:wget --adjust-extension --span-hosts --convert-links --backup-converted --page-requisites [url]
sam

4
หรือดีกว่าwget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows[url]
Petah

@ {etah: ฉันลองใช้คำสั่งของคุณด้วยข้อโต้แย้งของคุณมันจะดาวน์โหลดหน้าเว็บอื่นนอกเหนือจากที่ระบุไว้
ทิม

7

wgetคำสั่งมีตัวเลือก--mirrorซึ่งจะเป็นสิ่งเดียวกันเป็น:

$ wget -r -N -l inf --no-remove-listing

นอกจากนี้คุณยังสามารถ-xสร้างลำดับชั้นของไดเรกทอรีทั้งหมดสำหรับเว็บไซต์รวมถึงชื่อโฮสต์

คุณอาจไม่ได้รับสามารถที่จะหานี้ถ้าคุณไม่ได้ใช้รุ่นใหม่ล่าสุดของwgetแต่


1
สิ่งนี้มีแนวโน้มว่าจะรวบรวมข้อมูลทั้งเว็บไซต์ด้วย URL ย่อย
4253wyerg4e

2

ดูเหมือนว่าwgetFirefox จะไม่แยก CSS สำหรับลิงก์เพื่อรวมไฟล์เหล่านั้นในการดาวน์โหลด คุณสามารถหลีกเลี่ยงข้อ จำกัด เหล่านั้นได้โดยทำสิ่งที่คุณทำได้และสคริปต์การแยกลิงก์จาก CSS หรือ Javascript ใด ๆ ในไฟล์ที่ดาวน์โหลดเพื่อสร้างรายการไฟล์ที่คุณพลาด จากนั้นการเรียกใช้ครั้งที่สองwgetในรายการลิงก์นั้นอาจทำให้เกิดสิ่งที่ไม่ได้รับ (ใช้-iแฟล็กเพื่อระบุ URL รายการไฟล์)

ถ้าคุณชอบ Perl มีโมดูลCSS :: Parserใน CPAN ที่อาจให้วิธีง่าย ๆ ในการแยกลิงค์ในแบบนี้

โปรดทราบว่าwgetมีการแยกวิเคราะห์เฉพาะมาร์กอัพ html ( href/ src) และ css uris ( url()) บางอย่างเพื่อพิจารณาว่าหน้าใดที่จำเป็นต้องได้รับ คุณอาจลองใช้ Firefox addons เช่น DOM Inspector หรือ Firebug เพื่อดูว่ามีการเพิ่มรูปภาพบุคคลที่สามที่คุณไม่ได้รับผ่าน Javascript หรือไม่ถ้าใช่คุณจะต้องใช้สคริปต์หรือปลั๊กอิน Firefox เพื่อรับรูปภาพ เกินไป.


อย่างที่ฉันพูดในความคิดเห็นสำหรับโพสต์แรกของฉันดูเหมือนว่าจะได้รับการแก้ไขใน v1.12 ฉันยังไม่รู้วิธีรวมรูปภาพที่อยู่บนเซิร์ฟเวอร์อื่น ๆ
user14124

อ๋อการแยก CSS เป็นสิ่งใหม่ใน wget v1.12 มันอยู่ด้านบนสุดของรายการเปลี่ยนแปลง: freshmeat.net/urls/376000c9c7a02f7a3592180c2390ff04
quack quixote

ลองเพิ่มตัวเลือก -H ในรายการ มันหมายถึง - ช่วงโฮสต์และช่วยให้การดาวน์โหลดเนื้อหาจากโฮสต์ภายนอก
Michael

2

ฉันสร้าง Webtography เพื่อจุดประสงค์ที่คล้ายกัน: https://webjay.github.io/webtography/

มันใช้ Wget และผลักดันเว็บไซต์ไปยังพื้นที่เก็บข้อมูลในบัญชี GitHub ของคุณ

ฉันใช้อาร์กิวเมนต์เหล่านี้:

--user-agent=Webtography
--no-cookies
--timestamping
--recursive
--level=1
--convert-links
--no-parent
--page-requisites
--adjust-extension
--max-redirect=0
--exclude-directories=blog

https://github.com/webjay/webtography/blob/master/lib/wget.js#L15-L26

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