Массовая загрузка PDF-файлов

Это может быть / возможно не удастся, используя bash happy для предложения на Python, если он есть.

Но я хотел бы загрузить все файлы PDF / ePubs из следующей ссылки

https://mises.org/library/books

Вы можете выбрать доступные PDF-файлы, выполнив следующие действия, выбрав PDF, а затем ВСЕ. Вы увидите список документов, которые они имеют в PDF.

Проблема заключается в том, что URL-адрес не изменяется, когда вы переходите через список, также существует одна и та же ссылка, если вы выбрали EPUB, а затем выберите ALL.

Поэтому, если бы я использовал wget curl, похоже, не было способа отличить PDF от EPUB.

Затем я собираюсь преобразовать их в PDF / EPubs с помощью Caliber и загрузить на мою учетную запись Kindle, чтобы потом у меня могла быть их стек, чтобы читать в то время как на трубке.

Заранее спасибо..

(Начинал в виде нескольких подсказок, в итоге оказался довольно огромным блобом ответа (снова:]))

Я не могу ответить, если на сайте существует какая-либо политика против пакетной загрузки, но в начале.

Хотя это очень специфично для сайта, такая же процедура должна быть применима к аналогичным сайтам, поэтому ответ может быть полезен для других. Больше похоже на пример.


На такой странице я бы посмотрел поближе на сайт, а не просто пытался просканировать его в целом. Для одного есть и свободное и платное содержание. Во-вторых, просто загрузка всего в огромную кучу может стать несколько грязной, особенно учитывая количество документов.

Изолирование индексных страниц

  1. На странице отображается тот же URL-адрес, независимо от того, в каком разделе вы находитесь. Но либо, глядя на источник, либо просто просматривая один из разделов, вы увидите, что у него есть как минимум две вероятные интересные цели:

     PDF : https://mises.org/library/books?book_type=539 EPUB: https://mises.org/library/books?book_type=537 
  2. Результат разбивается на 10 и 10 ударов. Например: PDF-шоу Показано 1 – 10 из 535 . Поднимая числа внизу, мы находим следующую интересную информацию: &page=1 , &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> 

Теперь все в зависимости от того, что вы хотели бы извлечь из этого пути, это либо пойти на имя файла + файл-url , либо включить метаданные и другие сахара, такие как автор, тема, изображения и т. Д. Для последнего вы будет использовать парсер HTML в чем-то вроде Python, Perl или тому подобного. Для первых это также можно использовать, но можно также использовать простые инструменты обработки текста, такие как sed , grep и т. Д.

В этом случае (для простоты) я иду на первое.

Теперь часто говорится, что никогда не следует анализировать HTML с регулярным выражением и т. Д., Но в этом случае мы не разбираем документ, а просто извлекаем соответствующие данные . Таким образом, особенно потому, что это не случайный, возможно, злонамеренный сайт, а также взломанный взломанный разметка – но краткий и хорошо отформатированный – использование sed и т. Д. В порядке (IMHO).

Оглядываясь дальше на pdfl-000.html мы обнаруживаем, что заголовок заключен в <h2 class="element-invisible"> заканчивающийся на .pdf . Ссылка для документа <a , имеет type="application/pdf .

С этой базой мы можем быстро извлечь все заголовки и цели, например, sed . В результате sed дает нам заголовок и URI на чередующихся строках, мы можем передать результат, чтобы 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 если вы хотите извлечь дополнительную информацию из файлов.

  • Быстрая сумма всех PDF- lenghth=NNN с использованием значения lenghth=NNN для URL-адреса показывает в общей сложности 7401933553 байт или 6,89 гигабайт для загрузки: P