Запишите требования к источнику до изменения кода
Это упражнение посвящено замене одного компонента существующего сборщика. Выпишите требования потребителя данных: какая информация обязательна, допустим ли исторический материал и что делать, если пригодная публикация не получена. Это правила приёма в вашем коде, а не возможности, появляющиеся вместе с API-ключом. По ним можно оценить результат перехода содержательнее, чем по одному успешному HTTP-ответу.
Reddit Scraping запрашивает независимый исторический архив. Он не обходит переданный URL, не получает текущие страницы Reddit и не предоставляет обход ограничений доступа. Сервис не связан с Reddit, не поддерживает публикацию, голосование, личные сообщения или Reddit OAuth. Прежде чем убирать компонент наблюдения за текущим сайтом, решите, подходят ли доступные исторические публикации вашему приложению и как вы будете обозначать их происхождение.
Получите страницу и определите исход запроса
Используйте GET https://api.redditscraping.com/v1/posts?subreddit=webscraping&limit=3 с X-API-Key: <key> либо Authorization: Bearer <key>. Фильтр сообщества и небольшой предел дают этап осмотра, а не доказательство релевантности или равного охвата. Сохраните ответ и параметры. Сравнивайте реальные поля с результатом старого парсера, не предполагая неизменную схему или обязательную предварительную очистку текста. Записи webscraping могут отсутствовать, поэтому успешный пустой ответ тоже нужно обработать.
Разделите три исхода входного этапа: ошибка запроса, успешный ответ без записей и записи, ожидающие проверки. При пустом результате не создавайте вымышленную публикацию, чтобы продолжить обработку. Если обязательного значения нет, сохраните исходный ответ и причину отклонения. Локальный отказ принять запись и ошибка API описывают разные события; последующая диагностика должна позволять их различать.
Нормализуйте после решения о приёме записи
Сохраните этап исходного ответа перед этапом сопоставления полей. Проверьте массив data и отличайте пустой успешный результат от неверной структуры или HTTP-ошибки. Для каждой записи сохраняйте идентификатор при наличии и проверяйте поля, нужные вашему потребителю данных. Разделяйте отсутствующий текст, пустую строку и отклонённую запись, чтобы отчёт о переходе объяснял судьбу каждого полученного элемента, а не скрывал потери при преобразовании.
Если приложение обрабатывает текст, сохраняйте полученный текст рядом с локально нормализованной версией. Применяйте только нужные потребителю преобразования, например его правила пробелов, и записывайте версию этих правил. Не превращайте отсутствующий текст в пустое наблюдение. Доступный идентификатор пригодится для сравнения; удаляя повторы, оставляйте объяснение собственного решения, не приписывая архиву гарантию уникальности.
Задайте границы запуска сборщика
Каждый запрос возвращает до 100 записей; для одного набора фильтров доступны до 100 страниц, по одной странице на обращение. Читайте total вместе с relation: eq — точный итог, gte — нижняя граница, unknown — ненадёжный итог или null. Не считайте неизвестное нулём, а точное число — доказательством полной выгрузки. Разбиение запросов и локальное удаление повторов организуют материал, но не доказывают полноту архива.
Повторите преобразование сохранённого ответа
Проверяйте изменённый преобразователь на уже сохранённом ответе. Так изменение кода можно отличить от другого результата нового запроса. Сопоставьте принятые записи, отклонения и пустые ответы с требованиями приложения. Имена файлов, сроки хранения и права доступа определяете вы. Локальное сохранение ответа не создаёт снимка на сервере и не гарантирует, что те же записи останутся доступны удалённо.
Решите, какую часть старого кода можно отключить
Что можно убрать? Загрузку HTML и селекторы, которые служили только получению исторического материала, принятого новым модулем. Что остаётся? Расписание, проверки полей, нормализация, хранение и объяснение пропусков. Если прежний сборщик также отвечал за актуальное состояние страницы, эта потребность остаётся нерешённой; архив нельзя объявлять полной заменой. Зафиксируйте границы перехода до включения следующего запуска по расписанию.
Кешируйте исходные ответы по необходимости и сохраняйте версию правил преобразования, чтобы повторять локальную обработку своих файлов. Новый удалённый запрос не обязан вернуть те же записи. Обрабатывайте 400, 401, 402 и 429 по документации. Один успешный запрос, включая пустой и повторный, стоит один кредит; потеря ответа возможна после оплаченного успеха. Цены и страница ключа описывают кабинет, тогда как /v1/status не показывает баланс или состояние поиска.