ฉันจะแยกลิงก์. zip ทั้งหมดออกจากเว็บไซต์ได้อย่างไร


0

มีเครื่องมือในการแยกทั้งหมด .zip ลิงก์จากเว็บไซต์และบันทึกลงใน .txt ไฟล์. ฉันใช้ลินุกซ์มินต์ ฉันต้องการทั้งหมด .zip ลิงก์จากเว็บไซต์นี้:

http://all-free-download.com/free-photos/

คุณสามารถชี้ทางไปยังลิงก์ดังกล่าวได้หรือไม่? ฉันไม่ทราบวิธีการค้นหาอย่างชัดเจน
reinierpost

คำตอบ:


0

ฉันมีวิธีแก้ปัญหาแม้ว่ามันจะไม่สมบูรณ์และคุณต้องมี 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

แก้ไข

ข้อแม้อย่างหนึ่งคืออาจมีลิงก์ปรากฏซ้ำ ๆ โดยอ้างอิงจากการทดสอบกับเว็บไซต์ที่คุณพูดถึงดังนั้นโปรดจำไว้ว่า

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


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