Автоматизация поиска бесплатных консультаций экстрасенсов по регионам России с помощью Python

Сегодня интерес к альтернативным практикам остаётся высоким, и многие пользователи ищут бесплатные консультации экстрасенсов в своём регионе. Ниже представлен подробный гайд, как с помощью Python автоматизировать поиск такой информации, собрать данные из открытых источников и структурировать их по регионам России.


Подготовка окружения

Для работы понадобится базовый набор библиотек:

  • requests – для выполнения HTTP‑запросов к веб‑страницам;
  • pandas – для удобного хранения и экспорта результатов (CSV, Excel);
  • geopy (опционально) – для преобразования названий населённых пунктов в координаты, если понадобится картографическая визуализация.

Установить их можно одной командой:

pip install requests beautifulsoup4 pandas geopy


Определение целевых источников

Бесплатные услуги экстрасенсов часто анонсируются на:

  1. Форумах и досках объявлений (например, Avito, Юла – бесплатные разделы «Услуги»);
  2. Социальных сетях (группы ВКонтакте, Telegram‑каналы);
  3. Специализированных порталах о эзотерике (например, extrasensy.ru, magia.net);
  4. Местных городских порталах и досках объявлений региональных администраций.

Для демонстрации возьмём условный сайт extrasensy.ru, где в разделе «Бесплатные консультации» публикуются объявления с указанием города и контактных данных.


Структура парсера

Основной алгоритм состоит из следующих шагов:

  1. Формирование списка URL‑ов страниц с объявлениями (можно добавить пагинацию).
  2. Загрузка каждой страницы через requests.get.
  3. Нормализация названий городов (приведение к единому формату, удаление лишних пробелов, приведение к нижнему регистру).
  4. Сохранение результатов в структуру pandas.DataFrame и экспорт в CSV/Excel.

Пример кода

Ниже представлен минимальный рабочий пример, который иллюстрирует описанный выше процесс. Обратите внимание, что реальные селекторы (class, id) зависят от конкретного сайта и могут потребовать корректировки.

Импорт библиотек

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re

Функция загрузки страницы

def fetch_page(url):
headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36’}
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status
return response.text

Парсинг одного объявления

def parse_advertisement(block):
# Предположим, что каждый блок объявления имеет класс ‘ad-item’
title_tag = block.find(‘h3′, class_=’ad-title’)
city_tag = block.find(‘span’, class_=’ad-city’)

contact_tag = block.find(‘a’, class_=’ad-contact’)
date_tag = block.find(‘time’, class_=’ad-date’)

title = title_tag.get_text(strip=True) if title_tag else »
city = city_tag.get_text(strip=True) if city_tag else »
contact = contact_tag.get(‘href’) if contact_tag else »
date = date_tag.get_text(strip=True) if date_tag else »

return {‘title’: title, ‘city’: city, ‘contact’: contact, ‘date’: date}

Основной цикл обхода страниц

base_url = ‘https://extrasensy.ru/besplatnye-konsultacii?page=’
all_ads = []
page = 1
while True:
url = base_url + str(page)
try:
except Exception as e:
print(f’Ошибка загрузки страницы {page}: {e}’)
break

blocks = soup.find_all(‘div’, class_=’ad-item’)
if not blocks:
print(f’На странице {page} объявлений не найдено – завершаем.’)
break

for block in blocks:
ad = parse_advertisement(block)
all_ads.append(ad)

print(f’Обработана страница {page}, собрано {len(blocks)} объявлений.’)
page += 1
# Для предотвращения бесконечного цикла можно добавить ограничение:
# if page > 50: break

Сохранение результата

df = pd.DataFrame(all_ads)

df[‘city’] = df[‘city’].str.lower.str.strip
df.to_csv(‘extrasensy_free_services.csv’, index=False, encoding=’utf-8-sig’)
print(‘Данные сохранены в файл extrasensy_free_services.csv’)

Приведённый выше код можно адаптировать под любые другие источники, изменив селекторы и логику извлечения данных.


Работа с региональными данными

После получения таблицы с объявлениями удобно добавить информацию о федеральном округе или координатах для дальнейшего анализа:

  • Создайте справочник city_to_region.csv со столбцами city, region, federal_district (можно взять из открытых данных Росстата или Википедии).
  • Выполните левый join: df = df;merge(city_ref, on='city', how='left').
  • Теперь можно группировать по регионам: df.groupby('region').size – получите количество бесплатных предложений в каждом субъекте.
  • При необходимости используйте geopy для геокодирования названий городов и построения карты (например, с помощью folium или plotly).

Этические и правовые замечания

При парсинге общедоступных сайтов важно соблюдать следующее:

  • Уважать robots.txt целевого ресурса – не запрашивать страницы, помеченные как запрещённые.
  • Ограничивать частоту запросов (например, time.sleep(1) между запросами) чтобы не создавать нагрузку на сервер.
  • Не использовать полученные данные для спама, коммерческой рассылки или других действий, нарушающих законодательство РФ.
  • Если сайт требует регистрации или предоставляет данные только после авторизации, парсинг без согласия может быть незаконным.

Всегда проверяйте актуальность условий использования сайта и, при сомнении, обращайтесь к владельцам ресурса за разрешением.


С помощью Python можно быстро собрать актуальную информацию о бесплатных услугах экстрасенсов по различным регионам России, структурировать её и использовать для дальнейшего анализа (например, выявления регионов с наибольшей концентрацией таких предложений или построения карты доступности). Главное – правильно выбрать источники, аккуратно настроить парсер и соблюдать этические нормы при работе с веб‑данными.

Если вам понадобится расширить функционал (добавить уведомления о новых объявлениях через Telegram‑бот, периодический запуск скрипта через cron или интеграция с базой данных типа SQLite/PostgreSQL), базовый шаблон, представленный выше, легко масштабируется.

Удачного кодирования и успешного поиска нужной информации!