Сегодня интерес к альтернативным практикам остаётся высоким, и многие пользователи ищут бесплатные консультации экстрасенсов в своём регионе. Ниже представлен подробный гайд, как с помощью Python автоматизировать поиск такой информации, собрать данные из открытых источников и структурировать их по регионам России.
Подготовка окружения
Для работы понадобится базовый набор библиотек:
- requests – для выполнения HTTP‑запросов к веб‑страницам;
- pandas – для удобного хранения и экспорта результатов (CSV, Excel);
- geopy (опционально) – для преобразования названий населённых пунктов в координаты, если понадобится картографическая визуализация.
Установить их можно одной командой:
pip install requests beautifulsoup4 pandas geopy
Определение целевых источников
Бесплатные услуги экстрасенсов часто анонсируются на:
- Форумах и досках объявлений (например, Avito, Юла – бесплатные разделы «Услуги»);
- Социальных сетях (группы ВКонтакте, Telegram‑каналы);
- Специализированных порталах о эзотерике (например, extrasensy.ru, magia.net);
- Местных городских порталах и досках объявлений региональных администраций.
Для демонстрации возьмём условный сайт extrasensy.ru, где в разделе «Бесплатные консультации» публикуются объявления с указанием города и контактных данных.
Структура парсера
Основной алгоритм состоит из следующих шагов:
- Формирование списка URL‑ов страниц с объявлениями (можно добавить пагинацию).
- Загрузка каждой страницы через
requests.get. - Нормализация названий городов (приведение к единому формату, удаление лишних пробелов, приведение к нижнему регистру).
- Сохранение результатов в структуру
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), базовый шаблон, представленный выше, легко масштабируется.
Удачного кодирования и успешного поиска нужной информации!