Làm cách nào tôi có thể trích xuất tất cả các liên kết PDF trên một trang web?


10

Đây là một chủ đề nhỏ, nhưng tôi hy vọng các bạn sẽ giúp tôi. Tôi đã tìm thấy một trang web có đầy đủ các bài viết tôi cần, nhưng chúng được trộn với rất nhiều tệp vô dụng (chủ yếu là jpg).

Tôi muốn biết nếu có một cách để tìm ( không tải xuống ) tất cả các tệp PDF trên máy chủ để tạo một danh sách các liên kết. Về cơ bản, tôi chỉ đơn giản muốn lọc ra tất cả mọi thứ không phải là PDF, để có cái nhìn rõ hơn về những gì cần tải xuống và những gì không.


3
Bạn có thể sử dụng DownThem ALL cho nhiệm vụ. Đây là một tiện ích mở rộng firefox cho phép tải xuống các tệp bằng các bộ lọc và hơn thế nữa. Tôi chưa bao giờ sử dụng nó cho mình vì vậy tôi sẽ không thể đăng một hướng dẫn đầy đủ nhưng người khác có thể. Nếu bạn quen thuộc hơn với tiện ích mở rộng này, vui lòng gửi câu trả lời thích hợp.
Glutimate

Ah, tôi chỉ thấy rằng bạn chỉ muốn lọc các liên kết ra, không tải chúng xuống. Tôi không biết nếu điều đó có thể với phần mở rộng tôi đã đăng. Nhưng nó đáng để thử!
Glutimate

Câu trả lời:


15

Tổng quat

OK ở đây bạn đi. Đây là một giải pháp lập trình dưới dạng một kịch bản:

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

Cài đặt

Bạn sẽ cần phải có wgetlynxcài đặt:

sudo apt-get install wget lynx

Sử dụng

Kịch bản lệnh sẽ nhận được một danh sách tất cả các .pdftệp trên trang web và kết xuất nó vào đầu ra dòng lệnh và vào một tệp văn bản trong thư mục làm việc. Nếu bạn nhận xét lệnh "tùy chọn" wget, tập lệnh sẽ tiến hành tải tất cả các tệp vào một thư mục mới.

Thí dụ

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

...

Tại sao bạn sử dụng "$(pwd)/pdflinks.txt"thay vì pdflinks.txt?
jfs

@JFSebastian Bạn nói đúng, nó dư thừa. Tôi đã sửa đổi kịch bản. Cảm ơn!
Glutimate

Hoạt động hoàn hảo!
Chris Smith

6

một đoạn mã javascript đơn giản có thể giải quyết điều này: (LƯU Ý Tôi giả sử tất cả các tệp pdf được kết thúc bằng .pdf trong liên kết.)

mở bảng điều khiển javascript trình duyệt của bạn, sao chép mã sau đây và dán nó vào bảng điều khiển js, xong!

//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
Đối với tôi, điều này trả lại quá nhiều. Các luchức năng cần thiết để được: lu.endsWith (".pdf") == 1, sau đó đã cho tôi chỉ có liên kết PDF, không phải tất cả các mối liên hệ với "* .pdf, *" trong họ, đó là những gì tôi nhận với mã như được đăng. FWIW.
Dɑvïd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.