9 сентября 2022
686

Как скачать МНОГО файлов с Google Drive через wget

При скачивании большого количества файлов обычным способом гугл блокирует примерно через 50 файлов, даже если скачивать по одному файлу в 10 секунд (начинает отдавать 403 - "вы робот").

Чтобы "обмануть" его, нужно подсунуть свои куки из браузера для wget'а. Полагаю, что лимит в 50 файлов - это только для анонимусов, а для авторизованных пользователей он больше.

Итак, допустим, у нас есть набор ссылок:

И надо сказать, что далее предполагается, что все это - картинки jpeg, и скрипты рассчитаны именно на это.

Скрипты

Сначала создаём папку, в которую мы будем скачивать файлы, и кладем в неё скрипты:

dl.sh

#!/usr/bin/env bash

tr "=" " " | while read link id ; do 
    # trim
    id="`echo "$id" | sed 's/^\s*// ; s/\s*$//'`" 

    [ -z "$id" ] && {
        echo " !! Empty line: $link $id"
        continue
    }

    echo "$id" | grep "[^a-zA-Z0-9_-]" && {
        echo " !! Wrong id: $id"
        continue
    }

    file="$id.jpg"

    echo $id 

    [ -f $file ] && { 
        echo "  Already exists"
        continue
    }

    echo "Downloading"

    wget --load-cookies cookies.txt --no-check-certificate "https://docs.google.com/uc?export=download&id=$id" -O $id.jpg || { 
        echo "ERROR" 
        echo "Waiting for 10 minutes"
        date
        sleep 600 
    }

    echo "ok"

    sleep 10
done

multiple-to-single.sh

#!/usr/bin/env bash

# переводит строку с несколькими ссылками, разделенными точкой с запятой, вида:
# https://.../1.jpg ; https://.../2.jpg ; https://.../3.jpg
# в отдельные строки:
# https://.../1.jpg
# https://.../2.jpg 
# https://.../3.jpg
# пустые строки и лишние пробелы отбрасываются

tr ";" "\n" | while read link ; do 
    # sed is for trim
    echo "$link" | sed 's/^\s*// ; s/\s*$//'
done | grep -v "^$" 

check.sh

#!/usr/bin/env bash

find ./ -size 0

for i in *.jpg ; do
        file "$i"
done | grep -v 'JPEG image'

Файлы со ссылками

Теперь готовим файл со списком ссылок.

  • Либо каждая ссылка идет на одной строке.
  • Либо в одной строке несколько ссылок, разделенных запятыми:
https://drive.google.com/open?id=1eoWI7aANlCcZaA4CBIkoCL2T9QdMYGRw ; https://drive.google.com/open?id=18UAqItpNmBQ1JqSSCC3TS7j6DVzSJ-mm ; 
https://drive.google.com/open?id=12K_Y-I9Z9pEsFyDrgJfG-H0zgDEmI-1W

Размещаем этот файл рядом с dl.sh.

cookie

Нужно подготовить файл cookies.txt для wget, чтобы гугл не считал его анонимусом.

  1. Устанавливаем в chrome расширение cookies.txt
  2. Заходим на любую из ссылок, которую мы хотим скачать.
  3. С помощью расширения копируем все куки и сохраняем их в файл cookies.txt рядом со скриптом dl.sh.

Запуск

Для скачивания нужно запустить (допустим, ссылки у нас лежат в links.txt):

cat links.txt | ./multiple-to-single.sh | ./dl.sh

Запускаем в tmux, ждем пока все скачается.

Проверка и докачка

При скачивании некоторых ссылок может произойти ошибка и файл скачается не тот или битый.

После того как все файлы скачаются, запускаем проверку:

./check.sh

Если он что-то выведет, то это файлы, которые скачались криво. Их нужно удалить и повторно запустить скачивание.

Когда скачивание про все файлы будет говорить "Already exists", а проверка не выдает ничего, значит - готово.

Позвоните нам!
Личный кабинет
Вам будет доступна история заказов, управление рассылками, свои цены и скидки для постоянных клиентов и прочее.
Ваш логин
Ваш пароль