Использование Python и Wget для загрузки веб-страниц и файлов
Во многих контекстах, таких как автоматизация, наука о данных, инженерия данных, автоматизация и разработка приложений, Python является лингва-франка. Он широко используется для загрузки изображений и веб-страниц, причем для этого существует множество методов и пакетов. Один из простых, но надежных методов - взаимодействие с Wget.
Wget - это бесплатная программа командной строки двадцатипятилетней давности, которая позволяет получать файлы из веб-сервисов по протоколам HTTP, HTTPS и FTP. Если использовать ее вместе с Python, то можно практически не ограничивать себя в возможностях загрузки и извлечения файлов из Интернета.
В этой статье на простых примерах будут показаны преимущества использования Wget в Python. Вы также узнаете об ограничениях и альтернативах Wget.
Зачем использовать Wget?
Wget - это удобный и широко поддерживаемый инструмент для загрузки файлов по трем протоколам: HTTP, HTTPS и FTP. Своей популярностью Wget обязан двум основным характеристикам: рекурсивности и надежности.
Рекурсивность: При использовании соответствующих параметров Wget может работать как веб-краулер. Вместо загрузки одного файла он может рекурсивно загружать файлы, связанные с определенной веб-страницей, пока не будут исчерпаны все ссылки или пока не будет достигнута заданная пользователем глубина рекурсии. В этом случае Wget сохраняет загруженные файлы в структуре каталогов, напоминающей сервер, с которого они были загружены. Данная возможность является очень настраиваемой:
- поддерживает подстановочные знаки в сетевых расположениях и именах файлов
- предлагает проверку временных меток, так что скачиваются только новые или обновленные файлы
- соблюдает стандарт исключения robots
Надежность: Wget может восстанавливаться после обрыва передачи, что делает его хорошим решением для загрузки файлов по нестабильным или медленным сетям. Wget использует HTTP-заголовок Range для продолжения загрузки с того места, где она была прервана, до тех пор, пока не будет получен весь файл. Это не требует вмешательства со стороны пользователя.
Wget2 был выпущен в 2021 году. Хотя он поддерживает примерно те же функции, в нем сделан упор на распараллеливание, благодаря чему он работает гораздо быстрее своего предшественника.
Почему Wget с Python?
Python - это язык программирования общего назначения, используемый в финансовой сфере, академических кругах, облачных технологиях/инженерии данных, науке о данных, веб-разработке и автоматизации рабочих процессов. Он не только широко используется в различных областях и сферах деятельности, но и имеет огромное сообщество, является самым популярным языком программирования в Google и возглавляет список самых востребованных языков программирования в вакансиях.
Используя Wget, вы можете легко превратить скрипты на Python в полноценные решения для поиска информации в Интернете. Интересные примеры использования::
- Создание наборов данных для академических и бизнес-задач. С помощью Wget можно легко спарсить содержимое одного или нескольких сайтов. Такие большие наборы данных могут быть очень важны для исследований в области машинного обучения. Например, последние модели НЛП были бы невозможны без миллиардов фрагментов контента.
- Мониторинг крупных веб-сайтов. Автоматизируйте работу Wget для проверки доступности веб-страниц и файлов из различных сетей и мест по всему миру.
- Сопоставление контента. Множество веб-страниц генерируют персонализированный контент. Настроив Wget на поведение различных персон, можно получить представление о том, какой контент показывается тем или иным пользователям.
Хотя в Python существует множество способов запуска команд и программ оболочки (таких как Wget), в данном учебном пособии для взаимодействия с оболочкой операционной системы будет использоваться пакет subprocess.
Обратите внимание, что пакет Python wget, хотя и обладает некоторыми общими функциональными возможностями, не имеет отношения к программе командной строки Wget. Это недоработанный пакет, который не обновлялся уже несколько лет и не имеет большинства отличительных особенностей Wget.
Использование Wget в Python
Далее вы настроите Wget для загрузки файлов в Python.
Необходимые условия .
Прежде всего, убедитесь, что на вашем компьютере установлен Wget. Этот процесс зависит от операционной системы.
- Если вы используете Linux, то, возможно, он уже предустановлен.
- Если вы используете Mac, то проще всего установить Wget с помощью Homebrew.
- Пользователи Windows могут загрузить исполняемый файл инструмента командной строки Wget с этого сайта. После загрузки убедитесь, что он добавлен в переменную PATH.
Выполнение команд с помощью пакета Subprocess
Для выполнения команд Wget внутри Python-скрипта используется метод Popen пакета subprocess. Каждый раз, когда ваш скрипт вызывает popen(), он будет выполнять переданную команду в независимом экземпляре командного процессора операционной системы. Если установить аргумент verbose в True, то он также вернет вывод команды. Не стесняйтесь адаптировать этот код под свои нужды.
Все фрагменты кода можно найти в этом файле.
import subprocess
def runcmd(cmd, verbose = False, *args, **kwargs):
process = subprocess.Popen(
cmd,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
text = True,
shell = True
)
std_out, std_err = process.communicate()
if verbose:
print(std_out.strip(), std_err)runcmd('echo "Hello, World!"', verbose = True)
Все команды, которые вы будете использовать в этом разделе, построены одинаково. Вы используете команду wget, задаете ей URL и указываете определенные параметры для достижения определенных целей.
wget \[options\] url
Когда не стоит использовать Wget
Wget - отличное решение для рекурсивной загрузки файлов с веб-серверов. Однако его применение ограничено из-за такой узкой направленности, поэтому стоит рассмотреть альтернативные варианты.
- Для загрузки файлов по протоколам, отличным от HTTP(S) или FTP(S), лучше всего использовать cURL с Python.
- Если вам нужно спарсить только определенные элементы DOM на веб-странице, не сохраняя файл локально, рассмотрите запросы в сочетании с [Beautiful Soup]
Selenium - прекрасное решение для имитации поведения щелчков и прокрутки на сайте (например, в целях тестирования).
Заключение
Wget - это удобное решение для загрузки файлов по протоколам HTTP и FTP. Он хорошо сочетается с Python при рекурсивной загрузке нескольких файлов, и этот процесс можно легко автоматизировать, чтобы сэкономить время.
Возможно, направленность Wget несколько ограничена, но он предлагает множество возможностей для загрузки файлов и веб-парсинга.