Парсинг підписників Instagram

by Сергій Куліков

HTML

Запрошую у мій Telegram канал, де я ділюся корисним: https://t.me/KulikovSerhiiChannel

<br><br>##########<br><br>










Більш детально як це працює на YouTube:<br>
https://youtube.com/watch?v=j3xYQG8AVjQ

JavaScript

let totalURLs = 0; // Змінна для розрахунку загальної кількості URL
let timeoutId; // Ідентифікатор таймера
let lastURLs = []; // Останні URL, щоб відстежувати лише нові
let allURLs = []; // Усі знайдені URL у процесі виконання

// Функція для завантаження нових URL із затримкою
const loadMoreURLsWithDelay = () => {
	// Отримання всіх посилань всередині поточного елемента
	const links = usersElement.querySelectorAll('a:first-child');

	// Фільтрування тільки нових URL
	const newURLs = Array.from(links).map(link => link.href).filter(url => !lastURLs.includes(url));

	// Виведення в консоль тільки нових URL
	newURLs.forEach(newURL => {
		console.log(totalURLs + ' ' + newURL);
		totalURLs++; // Збільшуємо лічильник URL
		allURLs.push(newURL); // Додаємо нові URL у загальний масив
	});

	// Оновлюємо останні URL
	lastURLs = Array.from(links).map(link => link.href);

	// Прокручуємо поточний елемент вниз
	usersElement.scrollTop = usersElement.scrollHeight;
};

// Функція для збереження всіх URL-адрес у файл
const saveAllURLsToFile = (urls) => {
	const blob = new Blob([urls.join('\n')], { type: 'text/plain' });
	const url = URL.createObjectURL(blob);

	// Створення посилання для завантаження файлу
	const a = document.createElement('a');
	a.href = url;
	a.download = `Список підписників (${document.location.pathname.match(/\/([^\/]+)(?:\/|$)/)?.[1]}).txt`;
	document.body.appendChild(a);
	a.click();

	// Очищуємо посилання та звільняємо ресурси
	document.body.removeChild(a);
	URL.revokeObjectURL(url);
};

// Використовуємо Mutation Observer для відстеження додавання нових дочірніх елементів
const observer = new MutationObserver(mutations => {
	mutations.forEach(mutation => {
		if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
			setTimeout(() => {
				loadMoreURLsWithDelay();

				clearTimeout(timeoutId);
				timeoutId = setTimeout(() => {
					console.log('Завдання завершено, тайм-аут (30 секунд) минув');
					console.log(`Всього знайдено URL:...