Мне нужно загрузить очень большое количество PDF-файлов (было бы утомительно, если вообще возможно, собирать и сортировать все ссылки) с веб-сайта моего университета с помощью wget, со ссылками следующего вида:
http://example.edu/path_to_directory/directory/foobar.pdf
Я использую следующую команду:
wget -mk --no-check-certificate --load-cookies cookies.txt http://example.edu/arbitrary_link_to_directory/directory/
К сожалению, фактические каталоги, содержащие PDF-файлы, перенаправляют на страницу с ошибкой, и все, что я получаю, — это набор файлов HTML и CSS.
http://example.edu/path_to_directory/directory/
в браузере перенаправит на
http://example.edu/path_to_directory/error/error.html
Возможно ли вообще загрузить все указанные файлы с помощью wget?
решение1
Когда я хочу загрузить несколько файлов с веб-сайта, который не упрощает задачу (или активно затрудняет ее), я генерирую список URL-адресов файлов примерно следующим образом:
lynx -dump -listonly $URL | awk '/\.pdf/ {print $2}' > /tmp/pdflist.txt
Затем я обычно редактирую файл, vi
удаляя записи, которые не хочу загружать, и, наконец, извлекаю их все с помощью wget:
wget --input-file=/tmp/pdflist.txt
Это хорошо подходит для простых задач, и часто работает достаточно хорошо для задач средней сложности... но для сложных задач, включающих парсинг запутанного HTML и переход по ссылкам (и, возможно, использование файлов cookie), я напишу веб perl
-бота, используя libwww-perl
модуль (он жеLWP).
решение2
На сайте вашего университета есть страница, на которой размещены ссылки на все PDF-файлы? Или откуда вы знаете список имен PDF-файлов?
В этом случае вам нужно будет написать скрипт, который называется scraper, чтобы программно получать ссылки с этой страницы, а затем автоматически проходить по этому списку и загружать их с помощью wget или другого инструмента. Я бы посоветовал PHP или Python для написания scraper. Вы легко сможете управлять конечной пагинацией на исходном сайте. Если вы используете PHP, вы можете просто загружать файлы с помощью
file_put_contents('имя_файла_назначения', file_get_contents('url_источника');