Визуальный no-code-инструмент для веб-скрейпинга, доступный каждому.
В этом руководстве я покажу, как я работаю с CAPTCHA при использовании Scrapy. Я проведу вас через методы, которые использую для их обхода, чтобы ваш скрейпер работал стабильно и без постоянных прерываний.
Что такое CAPTCHA?
CAPTCHA расшифровывается как “Completely Automated Public Turing test to tell Computers and Humans Apart.” Проще говоря, это тест, который используется, чтобы определить, человек посетитель или бот.
К типам CAPTCHA относятся:
- Тесты с выбором изображений (выберите все квадраты с автомобилем).
- Текстовые головоломки (введите буквы, которые видите).
- ReCAPTCHA от Google (чекбокс «Я не робот»).
- Невидимые CAPTCHA (работают в фоновом режиме и незаметно блокируют ботов).
Почему Scrapy-скрейперы блокируются
Scrapy эффективен и быстр. Но в этом и проблема. Боты часто отправляют много запросов очень быстро. Серверы распознают такие паттерны и активируют CAPTCHA.
Вот несколько причин, по которым скрейперы на Scrapy сталкиваются с CAPTCHA:
- Повторные визиты с одного и того же IP-адреса.
- Отсутствуют корректные заголовки браузера.
- Слишком частые запросы.
- Отсутствует выполнение JavaScript.
Теперь разберем, как обходить CAPTCHA при использовании Scrapy.
Способ 1: Используйте Web Scraping API
Самый простой способ обойти CAPTCHA — использовать API для скрапинга. Эти API берут на себя всё за вас: прокси, CAPTCHA и рендеринг JavaScript.
Что такое API для веб-скрапинга?
Это сервис, который собирает данные за вас. Вы отправляете целевой URL, а API возвращает данные страницы после решения CAPTCHA и обхода блокировок.
Как это работает
- Вы отправляете запрос с целевым URL.
- API берет на себя всю защиту от ботов.
- Вы получаете чистый HTML-код.
Best Tools
Вот несколько лучших API для скрапинга:
- Яркие данные
- ScraperAPI
- Smartproxy
- Oxylabs
- Apify
Пример с Bright Data
Let’s see how to use Bright Data with Scrapy.
Шаг 1: Зарегистрируйтесь в Bright Data
Перейдите на их сайт и создайте аккаунт. Получите данные доступа к API.
Шаг 2: Отправьте запрос
импорт scrapy
импорт requests
класс APISpider(scrapy.Spider):
имя = 'api_spider'
def start_requests(себя):
url = "https://target-website.com"
proxy_url = f"https://brd.superproxy.io:22225"
response = requests.get(
"https://example-api.brightdata.com",
params={"url": url, "render": "правда"},
auth=('username', 'password') # Replace with your API credentials
)
урожайность scrapy.http.HtmlResponse(
url=url,
body=response.text,
encoding='utf-8'
)
Этот подход быстрый и позволяет обходить большинство CAPTCHA.
Способ 2: Используйте сервисы для решения CAPTCHA
Еще один способ обойти CAPTCHA — использовать сервисы для решения CAPTCHAЭти сервисы используют людей или ИИ, чтобы решать CAPTCHA за вас.
Popular Solving Services
- Решатель CAPTCHA от Bright Data
- 2Captcha
- Anti-Captcha
- DeathByCaptcha
- CapMonster
Эти платформы выдают вам API-ключ. Вы отправляете им CAPTCHA, а они возвращают ответ.
Пример с 2Captcha
Let’s solve a reCAPTCHA with 2Captcha using Scrapy.
Шаг 1: Установите библиотеку
pip install 2captcha-python
Шаг 2: Получите API-ключ
Зарегистрируйтесь в 2Captcha и скопируйте API-ключ из панели управления.
Шаг 3: Scrapy Spider с CAPTCHA Solver
импорт scrapy
с сайта twocaptcha импорт TwoCaptcha
класс CaptchaSpider(scrapy.Spider):
имя = 'captcha_spider'
start_urls = ["https://site-with-captcha.com"]
def solve_captcha(self, site_key, url):
solver = TwoCaptcha('YOUR_API_KEY')
попробуйте:
result = solver.recaptcha(sitekey=site_key, url=url)
возврат result.get('code')
кроме Исключение в роли e:
self.logger.error(f"Error solving CAPTCHA: {e}")
возврат Нет
def разбор(self, response):
site_key = "SITE_KEY_FROM_HTML"
captcha_code = self.solve_captcha(site_key, response.url)
если captcha_code:
self.logger.info("CAPTCHA решена!")
# Continue scraping using captcha_code
Этот подход полезен для форм и страниц входа, использующих reCAPTCHA.
Способ 3: Ротация премиум-прокси
Один из разумных способов избежать CAPTCHA — использовать разные IP-адреса. Это скрывает идентичность вашего бота и снижает вероятность столкнуться с CAPTCHA.
Что такое прокси с ротацией?
Ротация прокси дают вам новый IP-адрес для каждого запроса. Они не позволяют сайтам обнаруживать паттерны скрапинга.
Виды прокси
- Прокси-серверы для центров обработки данных (дешево, но легче обнаружить)
- Жилые доверенности (дороже, но их сложнее заблокировать)
- Мобильные прокси-серверы (очень мощный, но дорогой)
Использование прокси в Scrapy
Edit the Scrapy settings file (settings.py) and add proxy settings.
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1,
'myproject.middlewares.RandomProxy': 100,
}
PROXY_LIST = [
"http://user:pass@ip1:port",
"http://user:pass@ip2:port",
# Add more proxies9
]
Затем создайте middleware, которое выбирает случайный прокси.
импорт случайно
класс RandomProxy:
def обрабатывать_запрос(self, request, spider):
proxy = random.choice(spider.settings.get('PROXY_LIST'))
request.meta['proxy'] = proxy
Это циклически меняет прокси и снижает вероятность столкнуться с CAPTCHA.
Метод 4: используйте headless-браузеры
Иногда одного Scrapy недостаточно для сайтов с большим количеством JavaScript. Некоторые CAPTCHA загружаются через JavaScript и не могут обрабатываться напрямую.
Чтобы исправить это, можно использовать headless-браузеры, такие как:
- Селен
- Драматург
- Всплеск (для Scrapy)
Использование Splash с Scrapy
Splash — это сервис рендеринга JavaScript, созданный для Scrapy.
Шаг 1: установите Splash
Вы можете запустить его с помощью Docker:
docker run -p 8050:8050 scrapinghub/splash
Шаг 2: добавьте middleware
In settings.py:
DOWNLOADER_MIDDLEWARES.update({
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
})
SPIDER_MIDDLEWARES.update({
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
})
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
Шаг 3: Используйте SplashRequest
с сайта scrapy_splash импорт SplashRequest
класс JSPageSpider(scrapy.Spider):
имя = 'js_page'
start_urls = ['https://example-js-page.com']
def start_requests(себя):
для url в self.start_urls:
урожайность SplashRequest(url, self.parse, args={'wait': 2})
Лучшие практики, позволяющие избежать CAPTCHA
Даже без навороченных инструментов есть простые вещи, которые можно сделать, чтобы избежать CAPTCHA:
1. Use User-Agent Headers
Всегда используйте заголовки настоящего браузера, чтобы выглядеть как обычный пользователь.
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
2. Снизьте скорость запросов
Добавляйте задержки между запросами, чтобы не вызывать подозрений.
DOWNLOAD_DELAY = 2
3. Use Cookies
Сохраняйте и повторно используйте сессионные cookies при скрейпинге. Это делает поведение вашего бота более последовательным.
4. Используйте заголовки Referer и Accept
Добавляйте заголовки, чтобы имитировать поведение реального браузера.
Какой метод выбрать?

Заключительные размышления
CAPTCHA встречаются повсюду и становятся все умнее. Но вам не нужно отказываться от проекта на Scrapy. С правильными инструментами и методами можно обойти почти любую CAPTCHA.
Используйте API для удобства, решатели при необходимости, ротируйте прокси, чтобы сохранять анонимность, и всегда имитируйте человеческое поведение с помощью заголовков и задержек.
С этими инструментами в вашем арсенале вы сможете продолжать скрейпинг безопасно и эффективно.

