Python Доступ до Інтернету за допомогою Urllib.Request і urlopen()

⚡ Розумний підсумок

urllib – це стандарт Python модуль для доступу до інтернет-даних, що дозволяє запускати програми URLта отримувати HTML, JSON або бінарний вміст. Функція 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?

urllib є a Python модуль, який можна використовувати для відкриття URLs. Він визначає функції та класи, які допомагають у URL дії.

З Python, ви також можете отримувати доступ до даних з Інтернету, таких як XML, HTML та JSON, та отримувати їх з нього, а потім безпосередньо працювати з цими даними. У розділах нижче ми побачимо, як отримувати дані з Інтернету. Наприклад, тут ми використовуємо Guru99 відео URL, отримайте до нього доступ за допомогою Pythonта роздрукуйте HTML-файл цього URL.

Пакет urllib об'єднує кілька модулів: urllib.request для відкриття URLs, urllib.error для винятків, які можуть викликати запити, urllib.parse для побудови та розбору URLs та 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 визначає два основні класи винятків.

  • Помилка HTTP викликається, коли сервер повертає код стану помилки, наприклад, 404 Не знайдено або 500 Внутрішня помилка сервера. Він містить код стану та тіло відповіді.
  • 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

Читання a 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 стандартна бібліотека, тому вона працює всюди без встановлення. Бібліотека запитів сторонніх розробників не вбудована, але багато розробників надають їй перевагу для щоденної роботи з HTTP, оскільки її синтаксис коротший і зручніший для читання.

Основні відмінності:

  • Установка: urllib постачається з Python, тоді як запити мають бути встановлені за допомогою pip.
  • Декодування: urllib повертає необроблені байти, які ви декодуєте самостійно, тоді як requests декодує текст та JSON автоматично.
  • Зручність: Запити обробляють сесії, файли cookie та користувацькі заголовки з меншою кількістю коду.
  • Залежності: urllib не додає нічого, тоді як requests покладається на urllib3 під ним.

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

Поширені запитання

urlopen() повертає об'єкт відповіді HTTP, зазвичай http.client.HTTPResponse. Ви викликаєте read() для отримання необроблених байтів, getcode() для зчитування коду стану та заголовки або 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(), а потім передайте їх як аргумент даних до urlopen() або об'єкта Request. Надання даних автоматично змушує urllib надсилати POST замість GET запиту.

Підсумуйте цей пост за допомогою: