Как скачать все файлы с сайта, чтобы сохранить их структуру папок?

  • 26 августа 2023 г. 10:06
Ответы на вопрос 2
Существуют различные способы автоматизировать процесс скачивания всех файлов с сайта, с сохранением структуры папок или помещением всех файлов в одну папку. Ниже представлены два примера использования программы wget и Python.

1. Используя программу wget:
   - Установите программу wget, если она еще не установлена, следуя инструкциям для вашей операционной системы.
   - Откройте командную строку или терминал.
   - Введите следующую команду:
     ```
     wget -r -np -k -P <путь_до_папки_назначения> <URL_сайта>
     ```
     Где:
     - `-r` означает рекурсивное скачивание всех файлов и подкаталогов.
     - `-np` предотвращает переход к родительским каталогам.
     - `-k` конвертирует ссылки так, чтобы они указывали на сохраненные файлы.
     - `-P` указывает путь до папки, куда будут сохранены файлы.
     - `<путь_до_папки_назначения>` - путь до папки, куда будут сохранены файлы.
     - `<URL_сайта>` - URL-адрес сайта, файлы которого вы хотите скачать.

   Например:
   ```
   wget -r -np -k -P C:\Users\Username\Downloads\website http://www.example.com
   ```
   Эта команда скачает все файлы с http://www.example.com и сохранит их в папке C:\Users\Username\Downloads\website, сохраняя структуру папок сайта.

2. Используя Python:
   - Установите библиотеку requests, если она еще не установлена, выполнив в командной строке или терминале следующую команду:
     ```
     pip install requests
     ```
   - Создайте новый Python-скрипт и откройте его в редакторе кода.
   - Вставьте следующий код в ваш скрипт:
     ```python
     import requests
     import os
     from urllib.parse import urlparse

     def download_file(url, base_path):
         response = requests.get(url)
         if response.status_code == 200:
             file_path = os.path.join(base_path, urlparse(url).path[1:])
             os.makedirs(os.path.dirname(file_path), exist_ok=True)
             with open(file_path, "wb") as file:
                 file.write(response.content)

     def download_website(url, base_path):
         response = requests.get(url)
         if response.status_code == 200:
             links = []
             for line in response.text.splitlines():
                 if "href" in line:
                     start_index = line.find("href=\"") + 6
                     end_index = line.find("\"", start_index)
                     link = line[start_index:end_index]
                     links.append(link)
             for link in links:
                 if link.startswith("http"):
                     download_file(link, base_path)
                 else:
                     download_file(url + link, base_path)

     base_url = "http://www.example.com"
     base_path = "C:/Users/Username/Downloads/website"
     download_website(base_url, base_path)
     ```
     Где:
     - `download_file()` - функция, которая скачивает отдельный файл по заданному URL и сохраняет его по указанному пути.
     - `download_website()` - функция, которая скачивает все файлы с сайта, сохраняя структуру папок.
     - `base_url` - URL-адрес сайта.
     - `base_path` - путь до папки, куда будут сохранены файлы.

   - Сохраните скрипт и запустите его с помощью интерпретатора Python.

   Примечание: Замените `http://www.example.com` и `C:/Users/Username/Downloads/website` на соответ
Попробуй использовать wget для загрузки файлов с сайта. Для этого укажи опцию -r, чтобы скачивать файлы рекурсивно, и -l 2, чтобы ограничить уровень рекурсии. Также укажи опцию --accept, чтобы указать типы файлов, которые нужно скачать, например, pdf и html. Команда будет выглядеть примерно так:
wget -r -l 2 --accept=pdf,html https://site.com
Похожие вопросы