Есть ли инструмент для извлечения всех .zip
ссылок с сайта и сохранения их в .txt
файл. Я использую Linux Mint.
Я хочу все .zip
ссылки с этого сайта:
http://all-free-download.com/free-photos/
У меня есть решение, хотя оно не идеальное и требует, чтобы у вас были установлены curl
и perl
, оба должны быть уже с Linux Mint, хотя мое решение включает в себя модуль Perl, который я написал, который доступен на CPAN. Опять же, cpan
должен быть доступен и уже установлен на Linux Mint, вам, возможно, придется настроить его, если вы этого еще не сделали.
Для модуля App::ExtractLinks вы можете установить его так:
$ cpan App::ExtractLinks
Пока ваши настройки Perl верны и все CPAN-модули видны на вашем пути, вы теперь сможете запускать extract-links
в вашем терминале. Если вы сделаете это без добавления чего-либо, вы ничего не увидите, потому что он ожидает поток HTML и выводит на стандартный вывод (вывод на ваш терминал) любые URL-адреса, которые появляются в href=""
или src=""
атрибуты, так что это действительно просто, но комбинируя это с некоторыми вещами в терминале, мы можем почти достичь того, что вы просили.
Если вы сохраните следующий скрипт bash в файл и дадите ему разрешение на выполнение chmod 755
или запустите его как это bash filename
:
#!/usr/bin/env bash
while read url
do
while read id
do
curl -s -I "http://files.all-free-download.com/free_download_graphic_$id.html" | perl -n -e '/^Location: (.*)$/ && print "$1\n"'
done < <(curl -s "$url" | extract-links | grep "_download" | grep -Eo '[0-9]*')
done < <(curl -s http://all-free-download.com/free-photos/ | extract-links | grep "\/download\/")
Теперь позвольте мне объяснить это построчно.
Сначала мы перенаправляем вывод следующей команды в цикл while read
while.
curl -s http://all-free-download.com/free-photos/ | extract-links | grep "\/download\/")
Он получает HTML-код из URL-адреса, который вы указали, направляет выходной поток в extract-links
(аргумент -s
для curl
просто означает, что curl
делает это без вывода сообщений), который затем отображает все ссылки, найденные на странице. Затем мы берем этот список ссылок и ищем только те, которые имеют /download/
в них, это то, что делает команда grep
. Конечно, это не общее решение, мне пришлось взглянуть на источник HTML сайта, который вы предоставили, и выяснить их логику URL.
После того, как мы получаем только ссылки с /download/
в них, мы передаем только их в цикл while read
, который берет каждую из них за раз и назначает ссылку на переменную $url
. Далее мы снова делаем аналогичную операцию:
curl -s "$url" | extract-links | grep "_download" | grep -Eo '[0-9]*'
При этом выполняется то же самое, что мы уже сделали, но по этой конкретной ссылке, на этот раз выполняется фильтрация для любой ссылки, в которой есть _download
, а затем только цифры из ссылки. Это снова я выясняю схему, которую они должны использовать, чтобы организовать ссылки и загрузки.
Позвольте мне сказать , в этот момент, что причиной этого является довольно громоздки, потому что не существует каких - либо прямых ссылок на файлы .zip
в любом месте на сайте, то .zip
загрузка начинается после того, как HTTP перенаправления при переходе на определенных страницах. Что подводит меня к последнему разделу:
curl -s -I "http://files.all-free-download.com/free_download_graphic_$id.html" | perl -n -e '/^Location: (.*)$/ && print "$1\n"'
Это берет только числа из ссылок, которые мы получили на предыдущем шаге, снова направляет их в цикл while read
, присваивает каждому из них переменную $id
и снова мы использовали curl
этот раз с опцией -I
, которая только извлекает заголовки (вместо загрузки файла) каждая страница в этот момент выполняет перенаправление, которое затем указывает на сам zip-файл. Мы запускаем вывод curl
через встроенный perl
скрипт, который является просто регулярным выражением для получения HTTP-заголовка Location
, который определяет, какой файл следует перенаправить.
Наконец, все, что вам нужно сделать, это:
bash my_script.sh > links.txt
редактировать
Одно предостережение в том, что могут появиться повторные ссылки, только на основании того, что я тестировал этот сайт, о котором вы упомянули, так что имейте это в виду.
И, очевидно, это не очень эффективная операция, но опять-таки она автоматизирована, и нет другого способа получить нужные данные, не имея доступа администратора к сайту.