Учебник Веб-скрейпинг на Python для начинающих
Полный курс по сбору данных с веб-сайтов на Python — от первого HTTP-запроса до промышленного краулера. Вы освоите библиотеку requests и парсинг HTML стандартными средствами Python, научитесь извлекать данные с помощью BeautifulSoup, работать с динамическими сайтами через Selenium и Playwright и строить масштабные краулеры на Scrapy.
Отдельный акцент — на ответственном скрейпинге: robots.txt, условия использования, правовые ориентиры (hiQ против LinkedIn, CFAA, GDPR) и логика антибот-защит. Многие примеры запускаются прямо в браузере на стандартной библиотеке Python.
Курс «Веб-скрейпинг на Python» состоит из 6 разделов и 18 уроков: Основы веба и HTTP для скрейпинга, requests и разбор HTML, Разбор HTML с BeautifulSoup, Динамические сайты: Selenium и Playwright, Scrapy: промышленный краулинг и Этика, закон и антибот-защиты. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Основы веба и HTTP для скрейпинга
- Что такое веб-скрейпинг и когда он нужен
Введение в веб-скрейпинг на Python: что такое скрейпинг, чем он отличается от парсинга и API, из каких этапов состоит и когда его стоит применять.
- HTTP под капотом: запросы, ответы и коды статуса
Как устроен протокол HTTP для веб-скрейпинга: методы GET и POST, заголовки, коды статуса 200/403/429, разбор URL через urllib.parse.
- Структура HTML и DOM-дерево
Как устроен HTML для скрейпинга: теги, атрибуты, классы, DOM-дерево. Разбор страницы стандартным модулем html.parser прямо в браузере.
- Что такое веб-скрейпинг и когда он нужен
2 requests и разбор HTML
- Библиотека requests: первые запросы
Как отправлять HTTP-запросы в Python с помощью requests: GET, заголовки, параметры, таймауты, raise_for_status и сессии. Лучшие практики скрейпинга.
- Извлечение данных стандартной библиотекой
Парсинг HTML без внешних библиотек: извлечение ссылок через html.parser и поиск e-mail регулярными выражениями re. Работает прямо в браузере.
- Работа с URL: ссылки и параметры пагинации
Как скрейперу обрабатывать URL в Python: urljoin для относительных ссылок, urlencode и urlunparse для пагинации каталога. Примеры работают в браузере.
- Библиотека requests: первые запросы
3 Разбор HTML с BeautifulSoup
- BeautifulSoup: парсинг HTML по-человечески
Знакомство с BeautifulSoup (bs4): построение дерева из HTML, методы find и find_all, поиск по тегу, классу и атрибутам, извлечение текста.
- CSS-селекторы и навигация по дереву
Поиск элементов в BeautifulSoup через CSS-селекторы (select, select_one) и навигация по дереву: find_parent, find_next_sibling. Сбор данных в список.
- Сбор данных в таблицу: CSV и JSON
Как собрать спарсенные данные в список словарей и сохранить в CSV/JSON стандартными модулями Python. Чистка и нормализация текста, защита от пустых полей.
- BeautifulSoup: парсинг HTML по-человечески
4 Динамические сайты: Selenium и Playwright
- Динамические сайты: почему requests не хватает
Почему на SPA-сайтах (React, Vue) данных нет в исходном HTML и requests видит пустой каркас. Два пути: скрытый JSON-API или управление браузером.
- Selenium 4: автоматизация браузера
Скрейпинг динамических сайтов с Selenium 4: запуск headless-браузера, поиск элементов по CSS, явные ожидания WebDriverWait вместо time.sleep, driver.quit.
- Playwright: современный браузерный скрейпинг
Playwright для скрейпинга динамики: запуск Chromium, авто-ожидание элементов, query_selector_all, перехват сетевых ответов для получения скрытого JSON-API.
- Динамические сайты: почему requests не хватает
5 Scrapy: промышленный краулинг
- Scrapy: фреймворк для масштабного краулинга
Знакомство со Scrapy: пауки (Spider), start_urls, метод parse, yield данных и Request, response.follow для пагинации, экспорт через -o, DOWNLOAD_DELAY.
- Архитектура Scrapy: путь запроса по конвейеру
Как устроен Scrapy внутри: движок, паук, планировщик (Scheduler), загрузчик (Downloader), Item Pipeline и middleware. Цикл краулинга и дедупликация URL.
- Вежливый Scrapy: robots.txt, задержки, AutoThrottle
Настройки ответственного краулинга в Scrapy: ROBOTSTXT_OBEY, DOWNLOAD_DELAY, CONCURRENT_REQUESTS, AUTOTHROTTLE, честный USER_AGENT и HTTPCACHE.
- Scrapy: фреймворк для масштабного краулинга
6 Этика, закон и антибот-защиты
- robots.txt и условия использования
Как читать и уважать robots.txt при скрейпинге: Disallow, Allow, Crawl-delay, проверка через urllib.robotparser. Отличие robots.txt от Terms of Service.
- Законность и этика скрейпинга
Правовые аспекты веб-скрейпинга: прецедент hiQ против LinkedIn и CFAA, публичные vs защищённые данные, GDPR и CCPA для персональных данных, авторские права, этика.
- Антибот-защиты: как сайты ловят ботов
Как работают антибот-системы (Cloudflare, DataDome): анализ User-Agent и заголовков, частоты запросов, TLS/JA3-отпечатков, JavaScript-челленджей и поведения.
- robots.txt и условия использования