ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Чтение HTML-кода из URL в Python 3.4: устранение проблем

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы быстро и непринужденно извлечь HTML-код страницы по URL, воспользуйтесь модулем requests, выполнив GET-запрос методом requests.get(). Атрибут .text позволит вам получить содержимое HTML:

Python
Скопировать код
import requests

html_content = requests.get('http://example.com').text
print(html_content)

Многими любимый http://example.com теперь у вас на ладони. Быстро и просто! Теперь погружаемся в технические детали.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Проверка вашей версии Python

Python
Скопировать код
import sys
print(sys.version)

Для гладкой работы библиотеки requests требуется Python версии 3.4 и выше. Убедитесь, что установленная версия Python соответствует требованиям.

Установка requests

Bash
Скопировать код
pip install requests

Установка модуля requests значительно упростит процесс извлечения HTML, выполнив за вас львиную долю работы.

Обработка исключений

Python
Скопировать код
import requests

url = 'http://example.com'
try:
    response = requests.get(url)
    response.raise_for_status()  # Генерируется исключение в случае ошибки запроса
    html_content = response.text
    print(html_content)
except requests.exceptions.RequestException as e:
    print(f"Произошло исключение: {e}")

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

Байтовые массивы – наше всё

Python
Скопировать код
import urllib.request

url = "http://example.com"
with urllib.request.urlopen(url) as response:
    html_bytes = response.read()
    html = html_bytes.decode("utf8")
    print(html)

В некоторых случаях urllib возвращает HTML в виде байтового массива. Для преобразования его в строку и получения контента страницы используйте метод decode(). И не забудьте закрыть соединение при использовании with.

Визуализация

Представьте себе, что библиотека Python — это человек, готовлюший по рецептам (👨‍🍳), а HTML-страницы есть сами рецепты (📜), скрытые где-то в интернете (🌐):

Markdown
Скопировать код
Процесс добычи 📜 при помощи Python-повара 👨‍🍳 можно представить так:
1. Найти URL "кухни" сайта, рецепт с которого вы хотите получить
2. Отправить запрос на HTML (📜)
3. Получить и прочитать 📜, после чего передать его вам

Использование модулей типа urllib и requests в Python похоже на то, как если бы наш повар имел в нужный момент правильные инструменты для добычи рецепта:

Python
Скопировать код
import requests               # инструмент, помогающий повару дойти до "кухни"
response = requests.get(url)  # отослать запрос на "вкусный" рецепт
html = response.text          # и вот этот самый рецепт у вас в руках!

Использование Python для получения HTML — это каким-то образом обрести сокровищницу рецептов, не вставая с дивана! 🌟

Альтернатива: urllib

Python
Скопировать код
import urllib.request

url = 'http://example.com'
with urllib.request.urlopen(url) as response:
    raw_html = response.read().decode('utf8')
print(raw_html)

Если по какой-то причине requests недоступен, urllib сможет стать его достойной заменой. Не забудьте закрыть соединение по завершении работы, чтобы корректно управлять ресурсами.

Высокоуровневая обработка ошибок

Чтобы избежать множества ошибок при извлечении HTML, проверьте формат URL перед тем, как отправлять запрос.

Управление ресурсами

Стремитесь к тому, чтобы получать требуемые данные, избегая ручного создания HTML-контента. Где это возможно, используйте готовые библиотеки и подходы.

Не забывайте о документации

Изучение способов извлечения HTML — это только начало. Не пренебрегайте ознакомлением со стандартной документацией Python, возможностями библиотеки requests и инструментами для парсинга вроде Beautiful Soup и lxml.

Полезные материалы

  1. urllib — Модули работы с URL — Документация Python 3.12.2
  2. Документация Beautiful Soup — Beautiful Soup 4.12.0 documentation
  3. Requests: HTTP для людей — Requests 2.31.0 documentation
  4. КАК использовать пакет urllib для доступа к интернет-ресурсам — Документация Python 3.12.2
  5. Beautiful Soup: Создаем веб-скрейпер на Python – Real Python
  6. lxml – Обработка XML и HTML на Python
  7. Документация Scrapy 2.11 — Scrapy 2.11.0 documentation