Основы работы с Fetcher¶
Введение¶
Fetcher позволяют отправлять запросы и получать страницы одной строкой кода, а затем возвращают объект Response. У них есть много дополнительных возможностей. Начиная с v0.3, у всех Fetcher есть отдельные классы для работы с сессиями. Например, браузерный Fetcher может держать браузер открытым до завершения всех запросов, вместо того чтобы открывать несколько браузеров. Выбор зависит от вашей задачи.
До v0.2 Scrapling был только средством разбора страниц. Эти возможности появились, чтобы постепенно собрать в одной библиотеке всё необходимое для веб-скрейпинга.
Fetcher не просто оборачивают другие библиотеки. Они используют их как движки для отправки запросов и получения страниц. Каждый Fetcher добавляет возможности, которых нет у самого движка, при этом использует его возможности и настраивает их для сбора данных.
Обзор Fetcher¶
В Scrapling есть HTTP-классы (Fetcher и AsyncFetcher) и браузерный класс (StealthyFetcher), а также классы сессий для повторных запросов.
Эта таблица поможет быстро сравнить их и сделать выбор.
| Возможность | Fetcher | StealthyFetcher |
|---|---|---|
| Относительная скорость | 🐇🐇🐇🐇🐇 | 🐇🐇🐇 |
| Скрытность | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| Средства обхода защиты от ботов | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| Выполнение JavaScript | ❌ | ✅ |
| Использование памяти | ⭐ | ⭐⭐⭐ |
| Лучше подходит для | Простого сбора данных, когда достаточно HTTP-запросов | - Сайтов с динамической загрузкой - Небольших задач автоматизации - Обхода защиты разной сложности |
| Браузеры | ❌ | Chromium и Google Chrome |
| API браузера | ❌ | Playwright |
| Сложность настройки | Просто | Просто |
На следующих страницах мы подробно рассмотрим каждый из них.
Настройка парсера во всех Fetcher¶
Все Fetcher импортируются одинаково, как вы увидите далее:
После импорта их можно использовать сразу, без создания экземпляра. Парсер будет работать с настройками по умолчанию: Чтобы настроить парсер (класс Selector), который обработает ответ перед возвратом, сначала выполните:from scrapling.fetchers import Fetcher
Fetcher.configure(adaptive=True, keep_comments=False) # and the rest
Доступны аргументы adaptive, adaptive_domain, huge_tree, keep_comments, storage и storage_args. Это те же аргументы, которые принимает класс Selector. Текущую конфигурацию можно в любой момент вывести командой <fetcher_class>.display_config().
Информация
Аргумент adaptive по умолчанию выключен. Включите его, чтобы использовать адаптивную функцию.
Настройка парсера для отдельного запроса¶
Приведённая выше настройка парсера действует на все запросы этого класса. Так проще работать с общими настройками.
Если для каждого запроса нужна своя конфигурация, передайте словарь в аргумент selector_config метода запроса (fetch/get/post/...).
Объект Response¶
Объект Response основан на классе Selector, но содержит дополнительные сведения об ответе: заголовки, статус, cookie и другие данные, как показано ниже:
from scrapling.fetchers import Fetcher
page = Fetcher.get('https://example.com')
page.status # HTTP status code
page.reason # Status message
page.cookies # Response cookies as a dictionary
page.headers # Response headers
page.request_headers # Request headers
page.history # Response history of redirections, if any
page.body # Raw response body as bytes
page.encoding # Response encoding
page.meta # Response metadata dictionary (e.g., proxy used). Mainly helpful with the spiders system.
Response. В браузерных сессиях с record_requests=True методы session.network.search(limit=None) и session.network.get(request_id) также возвращают сохранённые объекты Response. Подробнее о сохранённых ответах API и переходе на v5 читайте в разделе История сети.
Объект Response также позволяет одной строкой преобразовать страницу в очищенный Markdown для LLM:
css_selector позволяет преобразовать только выбранные элементы. Нужен набор зависимостей rag, который также входит в ai/shell/all. Подробнее читайте на странице Создание RAG-систем.
Примечание
В отличие от Selector, тело ответа класса Response начиная с v0.4 всегда хранится в байтах.