Ответ
Для веб-парсинга в 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
, который предоставляет готовую архитектуру для создания "пауков".