Авторизация на 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.

    Часто задаваемые вопросы