OSINT (Open Source Intelligence) — розвідка з відкритих джерел. Інформація лежить у відкритому доступі: сайти, соцмережі, публічні бази. Проблема — її багато, і вручну збирати довго.
Python дозволяє автоматизувати збір: завантажити сторінку, витягнути потрібні дані, зберегти в таблицю. Один скрипт замість годин ручної роботи.
Що освоїмо
HTTP-запити — як програма "заходить" на сайт
Парсинг HTML — витягування даних зі сторінки
Робота з API — отримання структурованих даних
JSON — формат обміну даними
Нові терміни
HTTP-запит
Звернення до сервера. GET — отримати дані, POST — відправити. Як запит по радіо: викликаєш — отримуєш відповідь.
URL
Адреса ресурсу в інтернеті. https://example.com/page — протокол, домен, шлях.
HTML
Мова розмітки веб-сторінок. Теги (<div>, <p>, <a>) структурують контент.
Парсинг
Розбір тексту для витягування потрібних частин. Як аналіз перехоплення: з потоку виділяємо суть.
API
Application Programming Interface — спосіб отримати дані напряму, без HTML. Сервер віддає структуровані дані.
JSON
JavaScript Object Notation — текстовий формат даних. Ключ: значення, як словник.
Встановлення бібліотек
pip install requests beautifulsoup4
requests — для HTTP-запитів. beautifulsoup4 — для парсингу HTML.
Частина 1: HTTP-запити
Базовий запит
import requests
# GET-запит — отримуємо сторінку
response = requests.get('https://httpbin.org/get')
# Код відповіді: 200 = успіх, 404 = не знайдено, 403 = заборонено
print(f"Статус: {response.status_code}")
# Вміст сторінки (текст)
print(response.text[:500]) # Перші 500 символів
Коди відповідей
200
OK — запит успішний
301/302
Redirect — сторінка переїхала
403
Forbidden — доступ заборонено
404
Not Found — сторінка не існує
429
Too Many Requests — забагато запитів, заблоковано
500
Server Error — помилка на сервері
Заголовки запиту
Сервери можуть блокувати запити без заголовків. User-Agent імітує браузер:
Сервер не відповів вчасно. Додай timeout: requests.get(url, timeout=10)
403 Forbidden
Сервер блокує. Додай User-Agent заголовок
429 Too Many Requests
Забагато запитів. Збільш паузи між запитами
AttributeError: NoneType
Елемент не знайдено на сторінці. Перевір селектори
JSONDecodeError
Відповідь не є валідним JSON. Перевір response.text
Робота з AI
Промпт для парсингу
Напиши Python-скрипт для збору даних з сайту [URL].
Потрібно витягнути:
- Заголовки новин
- Дати публікації
- Посилання на повні статті
Зберегти в CSV. Додай паузи між запитами.
Використовуй requests та BeautifulSoup.
Промпт для API
Є API: https://api.example.com/data
Документація: [посилання]
Напиши скрипт, який:
1. Робить запит з параметрами date_from, date_to
2. Парсить JSON-відповідь
3. Фільтрує по полю status = "active"
4. Зберігає в CSV
Типові помилки AI
Не додає паузи — скрипт блокують
Не перевіряє статус відповіді
Хардкодить селектори, які змінюються
Не обробляє помилки мережі
Етика та безпека
Перевіряй robots.txt — файл з правилами для ботів
Не перевантажуй сервери — додавай паузи
Використовуй VPN для чутливих запитів
Зберігай логи — що, коли, звідки збирав
Чек-лист
☐
requests та beautifulsoup4 встановлено
☐
Базовий GET-запит працює
☐
Парсинг HTML витягує дані
☐
scrape_quotes.py збирає цитати
☐
quotes.csv створено з даними
☐
API-запит повертає JSON
Самостійна практика
Більше сторінок. Модифікуй скрипт для збору всіх 10 сторінок
Інший сайт. Спробуй зібрати дані з новинного сайту
API погоди. Отримай прогноз з openweathermap.org (потрібна реєстрація)
Наступний урок
Урок 5: Робота з геоданими
Координати на карті, розрахунок відстаней, кластеризація точок.