Авторизация на Pikabu через Python: решение капчи и парсинг постов
Многие разработчики сталкиваются с проблемой автоматизации входа на сайт Pikabu для последующего сбора постов по тегам. Основная сложность - капча Google reCAPTCHA, которую сложно обойти стандартными методами. В этой статье мы разберём рабочий подход к авторизации на Pikabu с помощью Python, включая обработку капчи и корректную работу с сессией.
Почему стандартные методы авторизации не работают?
При попытке войти на Pikabu через requests.Session() и отправку POST-запроса с логином и паролем вы сталкиваетесь с reCAPTCHA. Эта капча не является простым изображением, которое можно распознать через Tesseract. Она требует взаимодействия с JavaScript и отправки токена, полученного от Google. Поэтому код, использующий pytesseract для распознавания капчи, не сработает.
Как правильно выполнить вход на Pikabu?
1. Использование Selenium для обхода reCAPTCHA
Единственный надёжный способ - эмулировать браузер через Selenium с WebDriver (например, ChromeDriver). Это позволяет загрузить страницу, ввести данные вручную или автоматически, дождаться решения капчи (через сервисы распознавания типа 2Captcha) и сохранить куки.
2. Сохранение и использование кук
После успешного входа через Selenium сохраните куки в файл (например, cookies.json). Затем в скрипте на requests загрузите эти куки и используйте их для запросов к API сайта. Это позволит получать данные без повторной авторизации.
3. Получение постов по тегам
Для парсинга постов по тегам используйте URL вида https://pikabu.ru/tag/МАШИНА?n=4&r=3&route=search. Отправляйте GET-запрос с сохранёнными куками и парсите HTML через BeautifulSoup. Пример структуры:
import requests
from bs4 import BeautifulSoup
url = 'https://pikabu.ru/tag/Машина?n=4&r=3&route=search'
cookies = {'cookie_name': 'cookie_value'}
response = requests.get(url, cookies=cookies)
soup = BeautifulSoup(response.text, 'html.parser')
posts = soup.find_all('article', class_='story')
for post in posts:
title = post.find('a', class_='story__title-link').text.strip()
print(title)Рабочий код для авторизации через Selenium
Ниже приведён пример, который открывает страницу входа, ожидает ручного ввода капчи (или автоматического через сервис) и сохраняет куки:
from selenium import webdriver
import json
import time
driver = webdriver.Chrome()
driver.get('https://pikabu.ru')
# Находим поля и вводим данные (логин/пароль)
login_input = driver.find_element_by_name('username')
login_input.send_keys('ваш_логин')
password_input = driver.find_element_by_name('password')
password_input.send_keys('ваш_пароль')
# Нажимаем кнопку входа
submit_button = driver.find_element_by_css_selector('button[type="submit"]')
submit_button.click()
# Даём время на решение капчи (вручную или через сервис)
time.sleep(30)
# Сохраняем куки
cookies = driver.get_cookies()
with open('pikabu_cookies.json', 'w') as f:
json.dump(cookies, f)
driver.quit()Частые ошибки при парсинге Pikabu
- Игнорирование кук: без них сервер возвращает страницу входа или капчу.
- Неправильный User-Agent: используйте заголовки реального браузера.
- Блокировка по IP: добавьте задержки между запросами (time.sleep).
Заключение
Авторизация на Pikabu через Python возможна только с использованием Selenium для обхода reCAPTCHA. Сохраняйте куки после входа и используйте их в requests для парсинга постов. Избегайте попыток распознать капчу через Tesseract - это неэффективно для reCAPTCHA. Следуя нашей инструкции, вы сможете настроить сбор данных с Pikabu.