PDFを一括ダウンロード

PDFを一括ダウンロード

とにかく、Pythonでbash happyを使ってアドバイスを得ることは可能かもしれません。

しかし、次のリンクからすべてのPDF / ePubをダウンロードしたいと思います。

https://mises.org/library/books

「PDF」を選択し、「すべて」を選択して次の操作を行うことで、利用可能なPDFを選択できます。保持しているPDF文書のリストが表示されます。

問題はリストを上にしてもURLが変わらないようで、EPUBを選択してから全体を選択すると同じリンクが表示されるという点だ。

したがって、wgetカールを使用すると、PDFとEPUBを区別する方法がないようです。

その後、Calibreを使用してPDF / EPubに変換し、My Kindleアカウントにアップロードしてパイプラインから複数の項目を読み取ることができます。

よろしくお願いします。

答え1

(いくつかのヒントで始まったのはかなり大きな答えになりました。(再び:))

サイトに一括ダウンロードに関するポリシーがあるかどうかは回答できませんが、一度はそうです。

これはサイトごとに異なりますが、同様のサイトでも同じプロセスが機能するため、回答が他の人に役立ちます。例に似ています。


存在するそのように私は単にサイト全体をクロールするのではなく、サイトのページを詳しく見てみましょう。まず、無料コンテンツと有料コンテンツがあります。第二に、複数のファイルをダウンロードするだけで少し混乱する可能性があります。特に、文書の数がどれだけ多いかを考えると、さらにそうです。

インデックスページの分離

  1. どのセクションにあっても、ページには同じURLが表示されます。ただし、ソースコードを表示したり簡単に実行したりできます。フープリン表示されるセクションの 1 つには、潜在的に興味深い 2 つ以上の目標があります。

    PDF : https://mises.org/library/books?book_type=539
    EPUB: https://mises.org/library/books?book_type=537
    
  2. 結果は10安打と10安打に分けられます。例: PDF 表示合計535項目中1〜10項目を表示中フープリンこれ数字一番下には次の興味深い情報があります:&page=1Wait &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

私たちはすでに作業に適した整列構造を持っています。

関連データの抽出

これを完了した後、次のステップはサブページの1つを詳しく見ていきます。たとえば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を示しています。

関連情報