มีเครื่องมือในการแยกทั้งหมด .zip
ลิงก์จากเว็บไซต์และบันทึกลงใน .txt
ไฟล์. ฉันใช้ลินุกซ์มินต์
ฉันต้องการทั้งหมด .zip
ลิงก์จากเว็บไซต์นี้:
http://all-free-download.com/free-photos/
มีเครื่องมือในการแยกทั้งหมด .zip
ลิงก์จากเว็บไซต์และบันทึกลงใน .txt
ไฟล์. ฉันใช้ลินุกซ์มินต์
ฉันต้องการทั้งหมด .zip
ลิงก์จากเว็บไซต์นี้:
http://all-free-download.com/free-photos/
คำตอบ:
ฉันมีวิธีแก้ปัญหาแม้ว่ามันจะไม่สมบูรณ์และคุณต้องมี curl
และ perl
ติดตั้งแล้วทั้งคู่ควรมี Linux Mint อยู่แล้วถึงแม้ว่าโซลูชันของฉันจะมีโมดูล Perl ที่ฉันเขียนซึ่งมีอยู่ใน CPAN อีกครั้ง cpan
ควรจะพร้อมใช้งานและติดตั้งบน Linux Mint แล้วคุณอาจต้องกำหนดค่าหากคุณยังไม่ได้ตั้งค่า
สำหรับโมดูล App :: ExtractLinks คุณสามารถติดตั้งแบบนี้ได้:
$ cpan App::ExtractLinks
ตราบใดที่การตั้งค่า Perl ของคุณถูกต้องและโมดูล CPAN ใด ๆ สามารถมองเห็นได้ในเส้นทางของคุณตอนนี้คุณควรจะสามารถรันได้ extract-links
ใน terminal ของคุณ หากคุณทำเช่นนั้นโดยไม่มีการวางท่อใด ๆ คุณจะไม่เห็นอะไรเลยเพราะคาดว่าจะมีกระแสข้อมูลของ HTML และจะส่งออกไปยังมาตรฐาน (พิมพ์ไปยังเทอร์มินัลของคุณ) URL ใด ๆ ที่ปรากฏใน href=""
หรือ src=""
คุณลักษณะดังนั้นมันง่ายมาก แต่เมื่อรวมเข้ากับสิ่งต่าง ๆ ในเทอร์มินัลเราเกือบจะบรรลุสิ่งที่คุณถาม
หากคุณบันทึกสคริปต์ทุบตีต่อไปนี้ลงในไฟล์และให้สิทธิ์อนุญาตการใช้งาน chmod 755
หรือเรียกใช้เช่นนี้ bash filename
:
#!/usr/bin/env bash
while read url
do
while read id
do
curl -s -I "http://files.all-free-download.com/free_download_graphic_$id.html" | perl -n -e '/^Location: (.*)$/ && print "$1\n"'
done < <(curl -s "$url" | extract-links | grep "_download" | grep -Eo '[0-9]*')
done < <(curl -s http://all-free-download.com/free-photos/ | extract-links | grep "\/download\/")
ตอนนี้ฉันลองและอธิบายทีละบรรทัด
ก่อนอื่นเราทำการส่งออกคำสั่งต่อไปนี้ไปยัง a while read
ห่วง
curl -s http://all-free-download.com/free-photos/ | extract-links | grep "\/download\/")
นี่จะได้รับ HTML จาก URL ที่คุณให้ไว้ไปป์ส่งกระแสข้อมูลไปยัง extract-links
, -s
ทะเลาะกับ curl
แค่หมายถึง curl
ทำสิ่งนี้อย่างเงียบ ๆ ) ซึ่งจะแสดงลิงก์ทั้งหมดที่พบในหน้า จากนั้นเราจะนำลิสต์ของลิสต์นี้ไปค้นหาลิ้งค์ที่มี /download/
ในพวกเขานี่คือสิ่งที่ grep
คำสั่งกำลังทำ แน่นอนว่านี่ไม่ใช่วิธีแก้ปัญหาทั่วไปฉันต้องดูที่แหล่ง HTML ของไซต์ที่คุณระบุและหาตรรกะของ URL
หลังจากเราได้รับลิงค์ด้วยเท่านั้น /download/
ในนั้นพวกเราส่งต่อพวกเขาไปยัง while read
วนรอบซึ่งใช้ทีละครั้งและกำหนดลิงก์ไปยังตัวแปร $url
. ต่อไปเราทำการดำเนินการที่คล้ายกันอีกครั้ง:
curl -s "$url" | extract-links | grep "_download" | grep -Eo '[0-9]*'
สิ่งนี้ทำงานแบบเดียวกับที่เราทำ แต่ผ่านลิงค์นี้โดยเฉพาะคราวนี้จะทำการกรองลิงก์ที่มีอยู่ _download
ในนั้นแล้วใช้เฉพาะตัวเลขจากลิงค์ นี่เป็นอีกครั้งที่ฉันค้นพบโครงร่างที่พวกเขาต้องใช้เพื่อจัดเรียงลิงก์และดาวน์โหลด
ให้ฉันบอกว่า ณ จุดนี้เหตุผลที่ค่อนข้างเกี่ยวข้องกับเรื่องนี้ก็เพราะไม่มีการเชื่อมโยงโดยตรงกับ .zip
ไฟล์ได้ทุกที่บนเว็บไซต์ .zip
การดาวน์โหลดเริ่มต้นหลังจากการเปลี่ยนเส้นทาง HTTP เมื่อคุณนำทางไปยังหน้าบางหน้า ซึ่งนำฉันไปยังส่วนสุดท้าย:
curl -s -I "http://files.all-free-download.com/free_download_graphic_$id.html" | perl -n -e '/^Location: (.*)$/ && print "$1\n"'
การดำเนินการนี้ใช้เฉพาะตัวเลขจากลิงก์ที่เราได้รับในขั้นตอนก่อนหน้านี้ while read
วนรอบมอบหมายให้แต่ละคนเป็นตัวแปร $id
และอีกครั้งที่เราใช้ curl
ในครั้งนี้ด้วย -I
ตัวเลือกซึ่งจะดึงเฉพาะส่วนหัว (แทนที่จะดาวน์โหลดไฟล์) แต่ละหน้าในจุดนี้จะทำการเปลี่ยนเส้นทางซึ่งชี้ไปที่ไฟล์ซิปของตัวเอง เราเรียกใช้ผลลัพธ์ของ curl
ผ่านทางอินไลน์ perl
สคริปต์ซึ่งเป็นเพียง regex เพื่อรับ Location
ส่วนหัว HTTP ซึ่งเป็นไฟล์ที่ระบุว่าจะเปลี่ยนเส้นทางไฟล์ใด
ในที่สุดสิ่งที่คุณต้องทำคือ:
bash my_script.sh > links.txt
แก้ไข
ข้อแม้อย่างหนึ่งคืออาจมีลิงก์ปรากฏซ้ำ ๆ โดยอ้างอิงจากการทดสอบกับเว็บไซต์ที่คุณพูดถึงดังนั้นโปรดจำไว้ว่า
เห็นได้ชัดว่านี่ไม่ใช่การดำเนินการที่มีประสิทธิภาพมาก แต่จากนั้นอีกครั้งมันก็เป็นแบบอัตโนมัติและไม่จำเป็นต้องมีวิธีอื่นในการรับข้อมูลที่คุณต้องการโดยไม่ต้องมีผู้ดูแลระบบเข้าสู่เว็บไซต์