Коротко: чтобы собрать скрапер Avito с помощью ChatGPT, попросите модель написать скрипт на Python с requests, BeautifulSoup и Selenium, а затем добавьте User-Agent, задержки и выгрузку в CSV. Минимальный каркас:
import requests
from bs4 import BeautifulSoup
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
url = "https://www.avito.ru/moskva/telefony?q=iphone"
html = requests.get(url, headers=headers, timeout=15).text
soup = BeautifulSoup(html, "html.parser")
cards = soup.select('[data-marker="item"]')
print(len(cards), "объявлений найдено")
Дальше из каждой карточки достаём заголовок, цену и ссылку, проходим по страницам пагинации и сохраняем результат в таблицу. Ниже — полный разбор с промптами для ChatGPT, обходом базовых блокировок и правовыми нюансами.
Что нужно знать перед сборкой скрапера Avito
- Avito — динамический сайт на React: часть данных подгружается JavaScript, поэтому «голый»
requestsнередко возвращает пустую разметку. Для полноценного сбора нуженSeleniumили Playwright. - ChatGPT пишет за вас код и селекторы, но не знает текущую разметку Avito — её нужно проверять самому в DevTools браузера.
- Цепляйтесь за атрибуты
data-marker, а не за CSS-классы: классы Avito меняет часто,data-markerстабильнее. - Массовый парсинг чужих объявлений нарушает пользовательское соглашение Avito, а сбор персональных данных подпадает под ФЗ-152. Официальный API Avito рассчитан на продавцов и управление своими объявлениями, а не на сбор чужих.
- Сохранять данные удобнее всего в CSV или Excel через
pandas.

- ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросети DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
- Где и как применять? Потестируем модель после установки на разных задачах
- Как дообучить модель под себя?
Какие данные можно собрать с объявления Avito
Из карточки объявления доступны заголовок, цена, ссылка на объявление, город и район, дата публикации, имя продавца и его рейтинг, а внутри самого объявления — описание, характеристики и фотографии. Для большинства учебных и аналитических задач хватает трёх полей: заголовок, цена, ссылка. Именно их мы и разберём в коде. Телефоны и контакты продавцов — это персональные данные, и их сбор мы намеренно оставляем за скобками: см. правовой раздел ниже.
Зачем вообще подключать ChatGPT к парсингу Avito
ChatGPT — языковая модель OpenAI, которая уверенно генерирует код на Python. Для скрапера это экономит время на рутине: модель предложит структуру скрипта, напишет функции разбора карточки, подскажет, как обойти типичную ошибку. Но ChatGPT работает вслепую — он не видит актуальную HTML-разметку Avito. Поэтому рабочая схема такая: вы открываете страницу Avito, смотрите разметку в DevTools, отдаёте ChatGPT конкретные селекторы, а он собирает из них готовый код. Модель — ускоритель, а не замена вашей проверки.
Почему старый подход «requests + BeautifulSoup» ломается на Avito
В большинстве вводных статей показывают код, который отправляет requests.get() на avito.ru и парсит ответ через BeautifulSoup. На простых сайтах это работает. На Avito — частично: карточки объявлений отрисовываются JavaScript уже в браузере, а сервер отдаёт лишь каркас страницы. В ответе requests нужных данных может просто не оказаться. Это первая причина, по которой новички получают пустой список и не понимают, что не так.
Решений два. Первое — забирать HTML через реальный браузер с помощью Selenium, который дожидается прогрузки контента. Второе — цепляться за стабильные атрибуты data-marker, которые Avito использует для разметки карточек. Разбирать полученный HTML удобно через BeautifulSoup — её методы select() и get_text() работают по привычным CSS-селекторам. Оба приёма легко описать ChatGPT в промпте.
Готовые промпты для ChatGPT под скрапер Avito
Качество кода напрямую зависит от формулировки. Общие запросы вроде «напиши парсер Avito» дают шаблонный и часто нерабочий результат. Давайте контекст, библиотеки и точные селекторы.
Промпт 1. Каркас скрипта
«Напиши скрипт на Python, который через Selenium открывает страницу выдачи Avito по URL, дожидается загрузки карточек с атрибутом data-marker=»item» и возвращает объект BeautifulSoup. Добавь заголовок User-Agent и таймаут».
Промпт 2. Разбор карточки
«Вот HTML одной карточки объявления Avito: [вставьте фрагмент из DevTools]. Напиши функцию parse_card(card), которая возвращает словарь с полями title, price, url. Цену приведи к числу, ссылку сделай абсолютной».
Промпт 3. Пагинация и сохранение
«Дополни скрипт: перебор страниц через параметр &p=, задержка time.sleep 4–8 секунд между запросами, сбор всех объявлений в список словарей и выгрузка в CSV через pandas с кодировкой utf-8-sig для корректного открытия в Excel».
Отдавайте фрагмент реальной разметки — тогда ChatGPT подставит верные селекторы вместо выдуманных.
Структура кода: из каких частей состоит скрапер

Рабочий скрапер Avito обычно делится на четыре функции: получение страницы, разбор одной карточки, обход пагинации, сохранение. Такое деление ChatGPT понимает с полуслова и не путается в длинном скрипте.
import time
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def get_soup(url):
options = Options()
options.add_argument("--headless=new")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
driver = webdriver.Chrome(options=options)
driver.get(url)
time.sleep(5) # ждём прогрузку JS
html = driver.page_source
driver.quit()
return BeautifulSoup(html, "html.parser")
Разбор объявления: заголовок, цена, ссылка
def parse_card(card):
title_el = card.select_one('[data-marker="item-title"]')
price_el = card.select_one('[data-marker="item-price"]')
title = title_el.get_text(strip=True) if title_el else None
href = title_el.get("href") if title_el else None
url = f"https://www.avito.ru{href}" if href else None
price = price_el.get_text(strip=True) if price_el else None
return {"title": title, "price": price, "url": url}
Названия атрибутов вроде item-title и item-price — ориентир, а не константа: перед запуском откройте карточку в DevTools и сверьте фактические data-marker. Мы проверяли: разметка Avito периодически меняется, и захардкоженный селектор в какой-то момент перестаёт находить элементы.
Пагинация: сбор нескольких страниц
def scrape_avito(base_url, pages=3):
results = []
for page in range(1, pages + 1):
url = f"{base_url}&p={page}"
soup = get_soup(url)
cards = soup.select('[data-marker="item"]')
for card in cards:
results.append(parse_card(card))
time.sleep(6) # пауза между страницами
return results
Сохранение в CSV и Excel
data = scrape_avito("https://www.avito.ru/moskva/telefony?q=iphone", pages=3)
df = pd.DataFrame(data)
df.to_csv("avito.csv", index=False, encoding="utf-8-sig") # utf-8-sig — чтобы Excel не ломал кириллицу
df.to_excel("avito.xlsx", index=False)
Кодировка utf-8-sig избавляет от «кракозябр» при открытии CSV в Excel — частая боль новичков.
Как обойти базовые блокировки
Avito защищается от автоматического сбора: следит за частотой запросов, проверяет заголовки, при подозрении показывает капчу. Полностью обойти защиту вводными приёмами нельзя, но снизить риск бана на первых сотнях объявлений — реально.
- User-Agent. Подставляйте заголовок реального браузера — запрос без него выглядит как бот.
- Задержки.
time.sleep(4–8)между действиями и длинная пауза каждые 20–30 объявлений имитируют поведение человека. - Сессия и cookies. Сохраняйте cookies в рамках одной сессии — резкие «холодные» запросы подозрительны.
- Прокси. При больших объёмах один IP быстро упирается в лимит; для серьёзного парсинга используют пул прокси. Это уже за рамками вводного скрипта.
Мини-вывод: заголовки и задержки — обязательный минимум; всё, что сложнее, — это уже гонка с антиботом, в которой Avito на своей стороне.
Типичные ошибки новичков
- Парсинг через голый requests. Возвращает пустоту из-за JS-рендеринга. Лечится Selenium или Playwright.
- Селекторы по CSS-классам. Классы Avito меняет часто — скрипт ломается через неделю. Используйте
data-marker. - Нет задержек. Десятки запросов подряд — быстрый бан по IP и капча.
- Слепая вера в код ChatGPT. Модель выдаёт правдоподобные, но выдуманные селекторы. Всегда сверяйте с реальной разметкой.
- Кодировка при экспорте. Без
utf-8-sigкириллица в Excel превращается в мусор.
Правовые и этические нюансы
Перед запуском стоит трезво оценить границы. Скрапинг Avito — это не «серая зона по умолчанию», а вполне конкретные риски.
- robots.txt и пользовательское соглашение. Автоматический массовый сбор данных противоречит правилам площадки.
- Персональные данные. Имена, телефоны и контакты продавцов — персональные данные; их сбор и обработка регулируются ФЗ-152. Для коммерческого использования это прямой риск.
- Официальный путь. Если вы продавец, у Avito есть официальный API и автозагрузка для работы со своими объявлениями — легальная альтернатива парсингу чужих.
Учебный проект «для себя» и промышленный сбор чужих контактов на продажу — юридически разные истории. Держите это в голове. Если цель — цены и ассортимент для анализа рынка, обходитесь агрегированными данными без персональной информации: так вы снижаете и правовой риск, и нагрузку на площадку.
Чек-лист: собрать скрапер Avito по шагам
- Открыть выдачу Avito в браузере, найти в DevTools атрибуты
data-markerдля карточки, заголовка и цены. - Отдать ChatGPT реальный фрагмент HTML и получить каркас на Selenium + BeautifulSoup.
- Написать
parse_card(): заголовок, цена, ссылка; цену привести к числу. - Добавить пагинацию через
&p=, User-Agent и задержкиtime.sleep. - Сохранить результат в CSV (
utf-8-sig) или Excel черезpandas. - Сверить код с реальной страницей и проверить правовые границы сбора.
FAQ
Можно ли спарсить Avito только на requests и BeautifulSoup?
Частично. Из-за JavaScript-рендеринга часть данных не попадает в ответ requests. Для стабильного результата подключают Selenium или Playwright, которые дожидаются прогрузки страницы.
Напишет ли ChatGPT рабочий парсер Avito сам?
Каркас — да, но не готовое решение «под ключ». ChatGPT не видит актуальную разметку Avito и подставляет предполагаемые селекторы. Вы даёте ему реальный фрагмент HTML из DevTools — тогда код становится рабочим.
Как сохранить результат в Excel без «кракозябр»?
Сохраняйте CSV с кодировкой utf-8-sig либо экспортируйте сразу в .xlsx через pandas.to_excel() — тогда кириллица открывается корректно.
За что можно получить бан при парсинге?
За частые запросы без задержек, отсутствие User-Agent и работу с одного IP. Avito отвечает капчей и блокировкой адреса. Помогают паузы, заголовки реального браузера и, при объёмах, прокси.
Легально ли парсить Avito?
Массовый сбор чужих объявлений нарушает пользовательское соглашение, а сбор персональных данных подпадает под ФЗ-152. Для работы со своими объявлениями используйте официальный API Avito.
Итог
ChatGPT ускоряет сборку скрапера Avito, но не отменяет вашу работу: проверить разметку, подставить актуальные data-marker, добавить заголовки и задержки, сохранить данные в CSV или Excel и не забыть про правовые границы. Собирайте по частям — каркас, разбор карточки, пагинация, сохранение — и на каждом шаге сверяйте код с реальной страницей.
- Освой нейросеть Perplexity и узнай, как пользоваться функционалом остальных ИИ в одном
- УЧАСТВОВАТЬ ЗА 0 РУБ.
- Расскажем, как получить подписку
- ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ нейросеть DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ