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


10

นี่เป็นหัวข้อเล็กน้อย แต่ฉันหวังว่าพวกคุณจะช่วยฉัน ฉันพบเว็บไซต์ที่เต็มไปด้วยบทความที่ฉันต้องการ แต่สิ่งเหล่านั้นปะปนกับไฟล์ที่ไม่มีประโยชน์มากมาย (ส่วนใหญ่เป็น jpgs)

ฉันต้องการทราบว่ามีวิธีการ ( ไม่ดาวน์โหลด ) PDF ทั้งหมดในเซิร์ฟเวอร์เพื่อสร้างรายการลิงก์หรือไม่ โดยพื้นฐานแล้วฉันต้องการกรองทุกอย่างที่ไม่ใช่ PDF เพื่อให้ได้มุมมองที่ดีขึ้นเกี่ยวกับสิ่งที่จะดาวน์โหลดและสิ่งที่ไม่


3
คุณอาจใช้DownThemAllสำหรับงานได้ เป็นส่วนขยายของ Firefox ที่อนุญาตให้ดาวน์โหลดไฟล์โดยตัวกรองและอื่น ๆ ฉันไม่เคยใช้มันด้วยตัวเองดังนั้นฉันจะไม่สามารถโพสต์บทแนะนำแบบเต็ม แต่คนอื่นอาจทำได้ หากคุณคุ้นเคยกับส่วนขยายนี้โปรดโพสต์คำตอบที่เหมาะสม
Glutanimate

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

คำตอบ:


15

ภาพรวม

ตกลงไปเลย นี่เป็นวิธีการเขียนโปรแกรมในรูปแบบของสคริปต์:

#!/bin/bash

# NAME:         pdflinkextractor
# AUTHOR:       Glutanimate (http://askubuntu.com/users/81372/), 2013
# LICENSE:      GNU GPL v2
# DEPENDENCIES: wget lynx
# DESCRIPTION:  extracts PDF links from websites and dumps them to the stdout and as a textfile
#               only works for links pointing to files with the ".pdf" extension
#
# USAGE:        pdflinkextractor "www.website.com"

WEBSITE="$1"

echo "Getting link list..."

lynx -cache=0 -dump -listonly "$WEBSITE" | grep ".*\.pdf$" | awk '{print $2}' | tee pdflinks.txt

# OPTIONAL
#
# DOWNLOAD PDF FILES
#
#echo "Downloading..."    
#wget -P pdflinkextractor_files/ -i pdflinks.txt

การติดตั้ง

คุณจะต้องมีwgetและlynxติดตั้ง:

sudo apt-get install wget lynx

การใช้

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

ตัวอย่าง

$ ./pdflinkextractor http://www.pdfscripting.com/public/Free-Sample-PDF-Files-with-scripts.cfm
Getting link list...
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/JSPopupCalendar.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/ModifySubmit_Example.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/DynamicEmail_XFAForm_V2.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/AcquireMenuItemNames.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/BouncingButton.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/JavaScriptClock.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/Matrix2DOperations.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/RobotArm_3Ddemo2.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/SimpleFormCalculations.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/TheFlyv3_EN4Rdr.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/ImExportAttachSample.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/AcroForm_BasicToggle.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/AcroForm_ToggleButton_Sample.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/AcorXFA_BasicToggle.pdf
http://www.pdfscripting.com/public/FreeStuff/PDFSamples/ConditionalCalcScripts.pdf
Downloading...
--2013-12-24 13:31:25--  http://www.pdfscripting.com/public/FreeStuff/PDFSamples/JSPopupCalendar.pdf
Resolving www.pdfscripting.com (www.pdfscripting.com)... 74.200.211.194
Connecting to www.pdfscripting.com (www.pdfscripting.com)|74.200.211.194|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 176008 (172K) [application/pdf]
Saving to: `/Downloads/pdflinkextractor_files/JSPopupCalendar.pdf'

100%[===========================================================================================================================================================================>] 176.008      120K/s   in 1,4s    

2013-12-24 13:31:29 (120 KB/s) - `/Downloads/pdflinkextractor_files/JSPopupCalendar.pdf' saved [176008/176008]

...

ทำไมคุณถึงใช้"$(pwd)/pdflinks.txt"แทนpdflinks.txt?
jfs

@JFSebastian คุณถูกต้องมันซ้ำซ้อน ฉันแก้ไขสคริปต์ ขอบคุณ!
Glutanimate

ทำงานได้สมบูรณ์แบบ!
Chris Smith

6

ตัวอย่าง javascript ง่าย ๆ สามารถแก้ปัญหานี้: (หมายเหตุ: ฉันถือว่าไฟล์ pdf ทั้งหมดลงท้ายด้วย. pdf ในลิงค์)

เปิดคอนโซล JavaScript ของเบราว์เซอร์คัดลอกโค้ดต่อไปนี้และวางลงในคอนโซล js เรียบร้อยแล้ว!

//get all link elements
var link_elements = document.querySelectorAll(":link");

//extract out all uris.
var link_uris = [];
for (var i=0; i < link_elements.length; i++)
{
    //remove duplicated links
    if (link_elements[i].href in link_uris)
        continue;

    link_uris.push (link_elements[i].href);
}

//filter out all links containing ".pdf" string
var link_pdfs = link_uris.filter (function (lu) { return lu.indexOf (".pdf") != -1});

//print all pdf links
for (var i=0; i < link_pdfs.length; i++)
    console.log (link_pdfs[i]);

1
สำหรับฉันมันกลับมามากเกินไป luฟังก์ชั่นที่จำเป็นจะต้อง: lu.endsWith (".pdf") == 1แล้วว่ามีฉันเพียงการเชื่อมโยงรูปแบบไฟล์ PDF ไม่ได้ทั้งหมดเชื่อมโยงกับ "* * * * * * * * .pdf" ในพวกเขาซึ่งเป็นสิ่งที่ผมได้มีรหัสเป็นโพสต์ FWIW
Dɑvïd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.