어쨌든 Python에서 bash happy를 사용하여 조언을 얻는 것이 가능할 수도 있고 불가능할 수도 있습니다.
하지만 다음 링크에서 모든 PDF/ePub을 다운로드하고 싶습니다.
https://mises.org/library/books
"PDF"를 선택한 다음 "모두"를 선택하여 다음을 수행하여 사용 가능한 PDF를 선택할 수 있습니다. 보유하고 있는 PDF 문서 목록이 표시됩니다.
문제는 목록을 위로 올려도 URL이 바뀌지 않는 것 같고, EPUB를 선택한 다음 전체를 선택하면 같은 링크가 나타난다는 점이다.
따라서 wget 컬을 사용하면 PDF와 EPUB를 구별할 방법이 없는 것 같습니다.
그런 다음 Calibre를 사용하여 PDF/EPub로 변환하고 내 Kindle 계정에 업로드하여 파이프라인에서 여러 항목을 읽을 수 있습니다.
미리 감사드립니다..
답변1
(몇 가지 힌트로 시작된 것이 꽤 큰 답이 되었습니다. (다시:]))
사이트에 대량 다운로드에 대한 정책이 있는지 여부는 답변할 수 없지만 일단은 그렇습니다.
이는 사이트별로 다르지만 유사한 사이트에서도 동일한 프로세스가 작동하므로 답변이 다른 사람들에게 유용할 수 있습니다. 예와 비슷합니다.
존재하다그런 식으로나는 단순히 사이트 전체를 크롤링하기보다는 사이트의 페이지를 자세히 살펴보겠습니다. 먼저 무료 콘텐츠와 유료 콘텐츠가 있습니다. 둘째, 단지 여러 개의 파일을 다운로드하는 것만으로도 약간 혼란스러울 수 있습니다. 특히 문서 수가 얼마나 많은지 고려하면 더욱 그렇습니다.
인덱스 페이지 분리
어느 섹션에 있든 페이지에는 동일한 URL이 표시됩니다. 하지만 소스 코드를 보거나 간단하게 수행할 수 있습니다.후플린표시되는 섹션 중 하나에는 잠재적으로 흥미로운 두 가지 이상의 목표가 있습니다.
PDF : https://mises.org/library/books?book_type=539 EPUB: https://mises.org/library/books?book_type=537
결과는 10안타와 10안타로 나누어집니다. 예: PDF 표시총 535개 항목 중 1 - 10개 항목 표시 중.후플린이것숫자맨 아래에는 다음으로 흥미로운 정보가 있습니다:
&page=1
Wait&page=2
.
조회수가 535개이므로 535 / 10 = 54
페이지를 다운로드해야 합니다. 실제 page=0
마지막 페이지는 page=53
.
이를 통해 시작하기 위해 무엇을 다운로드해야 하는지에 대한 팁을 얻을 수 있습니다. PDF:
https://mises.org/library/books?book_type=539&page=0
https://mises.org/library/books?book_type=539&page=1
...
https://mises.org/library/books?book_type=539&page=53
~처럼무료PDF에 무료 EPUB가 포함되어 있는 것으로 나타나므로 그럴 필요가 없을 수도 있습니다.EPUB상표.
이 경우 다음과 같이 끝날 수 있습니다.
mkdir mises.org
cd mises.org
터미널에서 실행하거나 스크립트 파일에 추가합니다.
for i in {0..53}
do
curl -o ./"$(printf "pdfl-%03d.html" $i)" "https://mises.org/library/books?book_type=539&page=$i"
done
우리는 이미 작업하기에 좋은 정렬된 구조를 가지고 있습니다.
관련 데이터 추출
이 작업을 완료한 후 다음 단계는 하위 페이지 중 하나를 자세히 살펴보는 것입니다. 예를 들어 pdfl-000.html
.
빠른 조사 끝에 우리는 각각의책포함된 항목:
<div class="panel-body">
... book data ...
</div>
이제 모든 것은 여기에서 경로를 추출하려는 대상에 따라 달라집니다.파일 이름+파일 주소또는 메타데이터 및 기타 정보도 포함합니다.설탕작가, 주제, 이미지 등 후자의 경우 Python, Perl 등의 HTML 파서를 사용할 수 있습니다. 전자의 경우에는 sed
다음 과 같은 더 간단한 텍스트 처리 도구도 사용할 수 있습니다 grep
.
이 경우에는 (단순화를 위해) 전자를 선택합니다.
요즘 사람들은 종종 우리가 해야 한다고 말한다.정규식으로 HTML을 구문 분석하지 마세요.잠깐만요. 하지만 이 경우에는 그렇지 않습니다.문서 분석하지만 단지관련 데이터 추출. 따라서 특히 임의의 악의적인 웹사이트나 태그가 지정된 해커 스플래터가 아니기 때문에 간결하고 형식이 잘 지정되어 있으므로 sed
사용해도 괜찮습니다(IMHO).
더 자세히 살펴보면 pdfl-000.html
제목이 <h2 class="element-invisible">
로 끝나는 콘텐츠 내에 포함되어 있음을 알 수 있습니다 .pdf
. 문서에 대한 링크 <a
가 있습니다 type="application/pdf
.
sed
이를 바탕으로 모든 제목과 대상을 신속하게 추출할 수 있습니다 sed
.제목그리고통일 자원 식별자대체 라인에서 결과를 paste - -
.
항목에 번호를 매기는 것이 좋을 것이기 때문에 이를 awk
변경된 문서 이름에 추가로 연결했습니다. 두 문서의 제목이 동일한 경우 시간을 절약할 수도 있습니다.
tab
이 대략적인 예에서는 이름이 존재 하지 않거나 이름의 일부라고 newline
가정 합니다 ."
sed -n -e 's#.*<h2 class="element-invisible"><a [^>]*>\([^<]*\.pdf\)</a>.*</h2>#\1#p' \
-e 's#.*<a[^>]* href="\([^"]*\)"[^<]*type="application/pdf;.*#"https://mises.org\1"#p' \
pdfl-* | \
paste - - | \
awk -F'\t' '{ printf "curl -o \"%03d-%s\" %s\n",NR,$1,$2 }' > curl.txt
다운로드
그런 다음 다음을 수행하십시오.
mkdir pdf
cd pdf
. ../curl.txt
그리고 다운로드될 때까지 기다립니다. 다음과 같이 끝났습니다.
001-A Spontaneous Order.pdf
002-Science Technology and Government.pdf
003-Science Technology and Government—Chinese.pdf
004-The Next Generation of Austrian Economics Essays in Honor of Joseph T. Salerno.pdf
005-A Short History of Man — Progress and Decline.pdf
...
사이드 노트
pdfl-NNN.html
파일에서 더 많은 정보를 추출하려면 파일을 보관하십시오.URL 값을 사용하는 모든 PDF의 빠른 합계는
lenghth=NNN
다운로드할 총 7401933553바이트 또는 6.89GiB를 보여줍니다.P