Какие библиотеки Python используются для веб-парсинга и в чем их различие?

Ответ

Для веб-парсинга в Python существует два основных подхода, зависящих от типа веб-страницы: статической или динамической.

1. Статические страницы (HTML)

Для страниц, контент которых не меняется после загрузки, используется комбинация библиотек:

  • requests: для выполнения HTTP-запросов и получения HTML-кода страницы.
  • BeautifulSoup4 или lxml: для парсинга HTML-документа и удобной навигации по его структуре с помощью CSS-селекторов или XPath.

Пример:

import requests
from bs4 import BeautifulSoup

URL = "https://example.com"

# 1. Получаем HTML-код
response = requests.get(URL)
response.raise_for_status() # Проверка на ошибки HTTP

# 2. Парсим HTML
soup = BeautifulSoup(response.text, 'html.parser')

# 3. Извлекаем данные (например, заголовок h1)
header = soup.find('h1')
if header:
    print(header.text)

2. Динамические страницы (JavaScript)

Для страниц, контент которых генерируется с помощью JavaScript в браузере, необходимы инструменты, которые могут исполнять JS.

  • Selenium или Playwright: управляют реальным браузером (Chrome, Firefox), позволяя дождаться загрузки всех динамических элементов перед парсингом.

Пример с Selenium:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# Установка и запуск драйвера
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

driver.get("https://example.com")

# Находим элемент по ID (современный синтаксис)
dynamic_content = driver.find_element(By.ID, "dynamic-content-id")
print(dynamic_content.text)

driver.quit()

Рекомендации:

  • Всегда проверяйте файл robots.txt сайта на наличие ограничений для парсинга.
  • Используйте User-Agent в заголовках requests, чтобы имитировать запрос от браузера.
  • Добавляйте задержки между запросами (time.sleep), чтобы не создавать чрезмерную нагрузку на сервер.
  • Для масштабных и сложных задач рассмотрите фреймворк Scrapy, который предоставляет готовую архитектуру для создания "пауков".