Jak mogę wyodrębnić wszystkie linki PDF na stronie internetowej?

10

To trochę nie na temat, ale mam nadzieję, że mi pomożecie. Znalazłem witrynę pełną artykułów, których potrzebuję, ale są one mieszane z wieloma bezużytecznymi plikami (głównie jpg).

Chciałbym wiedzieć, czy istnieje sposób, aby znaleźć ( nie pobrać ) wszystkie pliki PDF na serwerze, aby utworzyć listę łączy. Zasadniczo chciałbym po prostu odfiltrować wszystko, co nie jest plikiem PDF, aby uzyskać lepszy widok tego, co należy pobrać, a co nie.

Sebastiano Seno
źródło
3
Możesz użyć DownThemAll do zadania. Jest to rozszerzenie firefox, które pozwala pobierać pliki według filtrów i nie tylko. Nigdy nie korzystałem z niego sam, więc nie będę w stanie opublikować pełnego samouczka, ale może ktoś inny. Jeśli jesteś bardziej zaznajomiony z tym rozszerzeniem, możesz opublikować poprawną odpowiedź.
Glutanimate,
Ach, właśnie widziałem, że chcesz odfiltrować linki, a nie pobierać je. Nie wiem, czy jest to możliwe dzięki opublikowanemu przeze mnie rozszerzeniu. Ale warto spróbować!
Glutanimate,

Odpowiedzi:

15

Przegląd

Ok, no to dajesz. To jest programowe rozwiązanie w postaci skryptu:

#!/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

Instalacja

Będziesz musiał mieć wgeti lynxzainstalować:

sudo apt-get install wget lynx

Stosowanie

Skrypt pobierze listę wszystkich .pdfplików na stronie i zrzuci ją do wyjścia wiersza poleceń i pliku tekstowego w katalogu roboczym. Jeśli skomentujesz polecenie „opcjonalne”, wgetskrypt przejdzie do pobierania wszystkich plików do nowego katalogu.

Przykład

$ ./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]

...
Glutanimate
źródło
dlaczego używasz "$(pwd)/pdflinks.txt"zamiast pdflinks.txt?
jfs
@JFSebastian Masz rację, to jest zbędne. Zmodyfikowałem skrypt. Dzięki!
Glutanimate,
Działa perfecto!
Chris Smith
6

prosty fragment javascript może rozwiązać ten problem: (UWAGA : Zakładam, że wszystkie pliki pdf mają rozszerzenie .pdf w linku).

otwórz konsolę javascript przeglądarki, skopiuj poniższy kod i wklej go do konsoli js, gotowe!

//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]);
sgx1
źródło
1
Dla mnie to zwraca zbyt wiele. luFunkcja musiała być: lu.endsWith (".pdf") == 1, to załatwił mi tylko linki PDF, nie wszystkie linki z „* .pdf *” w nich, co jest, co mam z kodem jak pisał. FWIW.
Dɑvïd