PDF скачать скрипт загружает только некоторые PDF и медленно - PullRequest
0 голосов
/ 10 мая 2018

Я хотел бы загрузить несколько бесплатных pdf-файлов (копий старой газеты) с этого сайта Австрийской национальной библиотеки, используя wget, используя скрипт ниже:

#!/bin/bash
#A script to download issues of the Leipziger Zeitung (1814-1857)

for year in {14..57}; do
  DATES=$(curl -sS "http://anno.onb.ac.at/cgi-content/anno?aid=lzg&datum=18$year" | gawk 'match($0, /datum=([^&]+)/, ary) {print ary[1]}' | xargs echo)
  for date in $DATES; do
    echo "Downloading for $date"
    curl "http://anno.onb.ac.at/cgi-content/anno_pdf.pl?aid=lzg&datum=$date" -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'DNT: 1' -H "Referer: http://anno.onb.ac.at/cgi-content/anno?aid=lzg&datum=$date" -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.9' --compressed
    wget -A pdf -nc -E -nd --no-check-certificate --content-disposition http://anno.onb.ac.at/pdfs/ONB_lzg_$date.pdf
  done
done

Я выяснил, что скрипт просто загружает проблемы только по понедельникам и субботам (и, если они не доступны, проблемы со вторника, соответственно, если доступны воскресные выпуски), но не остальную часть недели, см. Вывод bash ниже.

Downloading for 18140228
Downloading for 18140402
Downloading for 18140404
Downloading for 18140409
Downloading for 18140412
Downloading for 18140416
Downloading for 18140418
Downloading for 18140423
Downloading for 18140425
Downloading for 18140430

В те дни, не каждый день или месяцы были опубликованы или доступны сегодня. Однако, если вы сравните этот календарь на 1814 год, например, апрель, вы обнаружите, что скрипт загружает только два выпуска в неделю. Он загружает выпуски от 4 апреля 1814 года и 9 апреля, но не загружает доступные выпуски с 5 по 7 апреля. Это верно для других недель в апреле 1814 года и любого другого доступного месяца в пределах соответствующего промежутка времени между 1814 и 1857.

Я новичок в написании сценариев, и мне помогли с настоящим (см. этот вопрос здесь), поэтому я не знаю, как заставить его загрузить все доступные проблемы.

Кроме того, с помощью time я измерил, что выполнение команды curl занимает от 3 до 5 секунд. Есть ли способ как ускорить работу скрипта?

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

При просмотре источника страницы для одной из страниц годового индекса (например, http://anno.onb.ac.at/cgi-content/anno?aid=lzg&datum=1814) похоже, что match() выбирает только первые datum в каждой строке в необработанном HTML.

Изменив команду gawk на использование split(), вместо этого выбрал все совпадения:

gawk 'split($0, t, /datum=[^&]+/, ary) {for (i=1; i in ary; i++) print substr(ary[i],7)}'

(Как обычно с awk и его потомками, есть много других способов сделать это).

Downloading for 18140228
Downloading for 18140402
Downloading for 18140404
Downloading for 18140405
Downloading for 18140406
Downloading for 18140407
Downloading for 18140409
Downloading for 18140412
Downloading for 18140413
Downloading for 18140414
Downloading for 18140416

Чтобы ускорить процесс, запуск wget в фоновом режиме, кажется, работает хорошо:

wget -A pdf -nc -E -nd --no-check-certificate --content-disposition http://anno.onb.ac.at/pdfs/ONB_lzg_$date.pdf &

- если не знаком, отметьте & в концетам.

Я подумал, что потребуется немного больше работы, чтобы ограничить количество загрузок, запущенных одновременно, но в тесте это привело к 10-12 загрузкам, работающим вместе - от просмотра ps -ef | grep wgetна другой сессии.

0 голосов
/ 11 мая 2018

Проверяли ли вы те, которые были загружены, с тем, что доступно? Похоже, что многие проблемы просто недоступны, в частности, по пятницам и воскресеньям (возможно, не публиковались в те дни?), По крайней мере, за те годы, которые я проверил, а в некоторых случаях целые месяцы отсутствуют. Интересный проект, кстати.

...