Як я можу отримати всі посилання 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

Працює досконало!
Кріс Сміт

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.