Python Доступ в Интернет с использованием Urllib.Request и urlopen()

⚡ Умное резюме

urllib — это стандарт. Python модуль для доступа к интернет-данным, позволяющий открывать программы. URLФункция `urllib.request.urlopen()` подключается к веб-адресу и считывает ответ сервера непосредственно в веб-интерфейс. Python.

  • 🔘 Стандартная библиотека: urllib поставляется с Python и включает в себя модули request, error, parse и robotparser для URL Задачи.
  • ☑️ Открыть URL: Функция urllib.request.urlopen() открывает соединение, а функция getcode() возвращает HTTP-статус, например, 200.
  • Ознакомьтесь с ответом: Метод read() возвращает необработанные байты, которые функция decode(“utf-8”) преобразует в читаемый текст.
  • 🧪 Обработка ошибок: Перехват HTTPError и URLОшибка возникает из-за urllib.error, поэтому неудачные запросы не приводят к сбою программы.
  • 🇧🇷 Скачать файлы: Функция urlretrieve() сохраняет любые URL Запись непосредственно на диск, идеально подходит для изображений, PDF-файлов и наборов данных.
  • 🤖 Готовность к ИИ: urllib получает наборы данных и данные API, которые используются моделями машинного обучения и конвейерами искусственного интеллекта.

Python Доступ в Интернет с помощью Urllib

В разделах ниже объясняется, что такое urllib и как открыть файл. URL а также прочитать его HTML-код, узнать, как обрабатывать ошибки, загружать файлы и выбирать между библиотеками urllib и requests.

Что такое урллиб?

urllib - это Python модуль, который можно использовать для открытия URLОн определяет функции и классы, которые помогают в URL действия.

С PythonВы также можете получать доступ к данным из интернета, таким как XML, HTML и JSON, и затем работать с этими данными напрямую. В разделах ниже мы рассмотрим, как получать данные из сети. Например, здесь мы используем Guru99 видео URL, получить к нему доступ, используя Pythonи распечатать HTML-файл этого файла. URL.

Пакет urllib объединяет несколько модулей: urllib.request для открытия URLs, urllib.error для исключений, которые могут возникать при запросах, urllib.parse для построения и анализа URLи urllib.robotparser для чтения файлов robots.txt.

Как открыть URL с использованием Urllib

Прежде чем запускать код для подключения к интернету, нам необходимо импортировать... URL библиотечный модуль, или «urllib».

Открыто URL с использованием Urllib

  • Импортировать urllib
  • Определите свою основную функцию
  • Объявите переменную webUrl
  • Затем вызовите функцию urlopen из библиотеки urllib.
  • URL Мы открываем... Guru99 уроков по YouTube
  • Далее мы выводим код результата.
  • Код результата извлекается путем вызова функции getcode для созданной нами переменной webUrl.
  • Мы преобразуем это в строку, чтобы ее можно было объединить с нашей строкой «код результата».
  • Это будет обычный HTTP-код «200», указывающий на успешную обработку HTTP-запроса.

Как получить HTML-файл из URL in Python

Вы также можете прочитать HTML-файл, используя функцию `read()`. PythonПри запуске кода HTML-файл появится в консоли.

HTML-файл из URL in Python

  • Вызовите функцию `read()` для переменной `webUrl`.
  • Метод `read()` позволяет читать содержимое файлов данных.
  • Прочитайте весь текст. URL в переменную с именем data
  • Запустите код, и он выведет данные в формате HTML.

Вот полный код:

Python 2 Пример

#  
# read the data from the URL and print it
#
import urllib2

def main():
# open a connection to a URL using urllib2
   webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com")
  
#get the result code and print it
   print "result code: " + str(webUrl.getcode()) 
  
# read the data from the URL and print it
   data = webUrl.read()
   print data
 
if __name__ == "__main__":
  main()

Python 3 Пример

#
# read the data from the URL and print it
#
import urllib.request
# open a connection to a URL using urllib
webUrl  = urllib.request.urlopen('https://www.youtube.com/user/guru99com')

#get the result code and print it
print ("result code: " + str(webUrl.getcode()))

# read the data from the URL and print it
data = webUrl.read()
print (data)

Как обрабатывать ошибки urllib: URLОшибка и HTTPError

Запрос не всегда завершается успешно. Если что-то идёт не так, urllib вместо возврата данных генерирует исключение, поэтому важно обрабатывать такие ошибки. Модуль urllib.error определяет два основных класса исключений.

  • HTTPError Этот сигнал возникает, когда сервер возвращает код ошибки, например, 404 Not Found или 500 Internal Server Error. Он содержит код ошибки и тело ответа.
  • URLОшибка Этот сигнал возникает, когда сервер вообще недоступен, например, из-за неправильного доменного имени или отсутствия подключения к интернету. Он содержит атрибут reason, объясняющий причину сбоя.

Поскольку HTTPError является подклассом URLОшибка: всегда сначала перехватывайте HTTPError, чтобы каждый тип ошибки обрабатывался отдельно.

from urllib.request import urlopen
from urllib.error import HTTPError, URLError

try:
    response = urlopen("https://www.guru99.com/no-such-page.html")
    data = response.read()
except HTTPError as error:
    print("HTTP error:", error.code)
except URLError as error:
    print("URL error:", error.reason)

Обработка этих исключений предотвращает сбои в работе программы и позволяет регистрировать проблему, повторять запрос или использовать кэшированные данные.

Как скачать файл с URL Использование urllib

Чтение URL Сохранение в память подходит для небольших страниц, но для изображений, PDF-документов или наборов данных проще сохранить ответ непосредственно на диск. Модуль urllib.request предлагает два простых способа сделать это.

Функция urlretrieve() загружает файл URL напрямую в локальный файл одной строкой:

from urllib.request import urlretrieve

urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")

Для более полного контроля откройте URL и запишите байты самостоятельно. Откройте локальный файл в двоичном режиме, поскольку функция urlopen() возвращает байты, а не текст:

from urllib.request import urlopen

with urlopen("https://example.com/data.zip") as response:
    with open("data.zip", "wb") as file:
        file.write(response.read())

Для очень больших файлов чтение и запись осуществляются в цикле с использованием response.read(8192), поэтому весь файл никогда не будет удерживаться в памяти одновременно.

urllib против библиотеки requests в Python

urllib является частью Python Это стандартная библиотека, поэтому она работает везде без установки. Библиотека requests сторонних разработчиков не встроена, но многие предпочитают её для повседневной работы с HTTP, поскольку её синтаксис короче и понятнее.

Основными отличиями являются:

  • Установка: urllib поставляется с Python, в то время как requests необходимо устанавливать с помощью pip.
  • Расшифровка: urllib возвращает необработанные байты, которые вы декодируете самостоятельно, в то время как requests декодирует текст и JSON автоматически.
  • Удобство: Функция requests обрабатывает сессии, cookie и пользовательские заголовки с минимальным количеством кода.
  • зависимости: Библиотека urllib ничего не добавляет, в то время как requests использует библиотеку urllib3.

Выбирайте urllib, если вам не нужны никакие зависимости или требуется лишь быстрый, разовый запрос. Для более крупных проектов, связанных с аутентификацией, сессиями или частыми вызовами API, выбирайте requests. Оба варианта отправляют одни и те же HTTP-запросы, поэтому выбор сводится к удобству или меньшему списку зависимостей.

Часто задаваемые вопросы (FAQ)

Функция `urlopen()` возвращает объект HTTP-ответа, обычно `http.client.HTTPResponse`. Вызывается `read()` для получения исходных байтов, `getcode()` для чтения кода состояния, а также `headers` или `info()` для анализа метаданных, таких как тип содержимого и длина.

urllib2 принадлежал к Python 2. в Python 3. Она была реорганизована: её функции были разделены на urllib.request для открытия. URLs и urllib.error для исключений. Code Необходимо обновить код, написанный для urllib2, и импортировать вместо него urllib.request.

Функция read() возвращает байты, а не строку, поскольку функция urlopen() заранее не знает кодировку. Вызов decode(“utf-8”) преобразует эти байты в читаемый текст, что позволяет выводить, искать или анализировать содержимое HTML или JSON.

Откройте приложение URL С помощью функции `urlopen()` считываются байты, декодируются, а затем выполняется разбор с помощью модуля `json`: `json.loads(response.read().decode("utf-8"))`. Это возвращает результат. Python Словарь или список, который можно использовать напрямую, что часто встречается при вызове веб-API.

Обернуть URL Создайте объект urllib.request.Request и добавьте заголовок перед его открытием: request.add_header(“User-Agent”, “Mozilla/5.0”), затем передайте запрос в urlopen(). Пользовательские заголовки помогают, когда сервер блокирует стандартные. Python пользовательский агент.

Да. Библиотека urllib может получать наборы данных, CSV-файлы и JSON из веб-API, которые затем декодируются и загружаются в pandas или NumPy. Это легковесный, не требующий зависимостей способ извлечения обучающих данных в конвейер машинного обучения.

Да. GitHub Copilot автоматически дополняет распространенные шаблоны urllib, такие как вызовы urlopen(), объекты Request и обработка ошибок try/except. Это ускоряет написание шаблонного кода, но все равно следует проверять его корректность. URLs, заголовки и обработка исключений, которые предлагает ИИ-помощник.

Закодируйте параметры с помощью urllib.parse.urlencode(), преобразуйте их в байты с помощью encode(), а затем передайте их в качестве аргумента data в urlopen() или объект Request. Предоставление данных автоматически заставляет urllib отправлять POST-запрос вместо GET-запроса.

Подведем итог этой публикации следующим образом: