웹 사이트에서 모든 PDF 링크를 추출하려면 어떻게해야합니까?


10

이것은 조금 벗어난 주제이지만, 너희들이 나를 도울 수 있기를 바랍니다. 필요한 기사로 가득 찬 웹 사이트를 찾았지만 쓸모없는 파일 (주로 jpg)이 많이 있습니다.

링크 목록을 만들기 위해 서버에서 모든 PDF 를 찾거나 다운로드하지 않는 방법이 있는지 알고 싶습니다 . 기본적으로 다운로드 할 대상과 그렇지 않은 대상을 더 잘 볼 수 있도록 PDF가 아닌 모든 것을 필터링하고 싶습니다.


3
작업에 DownThemAll 을 사용할 수 있습니다 . 필터 등으로 파일을 다운로드 할 수있는 파이어 폭스 확장 프로그램입니다. 나는 그것을 직접 사용한 적이 없으므로 전체 자습서를 게시 할 수는 없지만 다른 사람은 게시 할 수 있습니다. 이 확장 프로그램에 대해 더 잘 알고 있다면 정답을 게시하십시오.
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

설치

당신이 필요합니다 wgetlynx설치 :

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

간단한 자바 스크립트 스 니펫은 이것을 해결할 수 있습니다 : (참고 : 모든 pdf 파일은 링크에서 .pdf로 끝났다고 가정합니다.)

브라우저 자바 스크립트 콘솔을 열고 다음 코드를 복사하여 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.