Есть ли инструмент для извлечения всех .zip ссылок с сайта и сохранения их в .txt файл. Я использую Linux Mint. Я хочу все .zip ссылки с этого сайта:

http://all-free-download.com/free-photos/

1 ответ1

0

У меня есть решение, хотя оно не идеальное и требует, чтобы у вас были установлены 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

редактировать

Одно предостережение в том, что могут появиться повторные ссылки, только на основании того, что я тестировал этот сайт, о котором вы упомянули, так что имейте это в виду.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .