Перейти к содержанию

Основы работы с 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 импортируются одинаково, как вы увидите далее:

from scrapling.fetchers import Fetcher, AsyncFetcher, StealthyFetcher
После импорта их можно использовать сразу, без создания экземпляра. Парсер будет работать с настройками по умолчанию:
page = StealthyFetcher.fetch('https://example.com') 
Чтобы настроить парсер (класс Selector), который обработает ответ перед возвратом, сначала выполните:
from scrapling.fetchers import Fetcher
Fetcher.configure(adaptive=True, keep_comments=False)  # and the rest
или:
from scrapling.fetchers import Fetcher
Fetcher.adaptive=True
Fetcher.keep_comments=False
Затем продолжайте писать код как обычно.

Доступны аргументы 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.
Все Fetcher возвращают объект Response. В браузерных сессиях с record_requests=True методы session.network.search(limit=None) и session.network.get(request_id) также возвращают сохранённые объекты Response. Подробнее о сохранённых ответах API и переходе на v5 читайте в разделе История сети.

Объект Response также позволяет одной строкой преобразовать страницу в очищенный Markdown для LLM:

markdown = Fetcher.get('https://example.com').markdown(main_content_only=True)
Перед преобразованием всегда удаляются скрипты, стили, скрытое содержимое и содержимое с внедрением инструкций. Аргумент css_selector позволяет преобразовать только выбранные элементы. Нужен набор зависимостей rag, который также входит в ai/shell/all. Подробнее читайте на странице Создание RAG-систем.

Примечание

В отличие от Selector, тело ответа класса Response начиная с v0.4 всегда хранится в байтах.