Node.js | Парсинг сайта
const axios = require('axios');
const cheerio = require('cheerio');
const TelegramBot = require('node-telegram-bot-api');
// Импортируем токен из key.js
const { token } = require('./key');
// Создаем экземпляр Telegram бота
const bot = new TelegramBot(token, { polling: true });
// URL сайта, который будем парсить
const url = 'https://trendcore.ru/'; // Замените на фактический URL
async function fetchData() {
try {
// Настраиваем запрос с увеличенным временем ожидания и пользовательским агентом
const response = await axios.get(url, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
},
timeout: 10000 // Таймаут 10 секунд
});
return response.data;
} catch (error) {
console.error('Error fetching data:', error);
throw error;
}
}
async function fetchDataWithRetry(retries = 3) {
for (let i = 0; i < retries; i++) {
try {
return await fetchData();
} catch (error) {
console.error(`Attempt ${i + 1} failed: ${error.message}`);
if (i === retries - 1) throw error;
await new Promise(resolve => setTimeout(resolve, 2000)); // Ожидание 2 секунды перед повторной попыткой
}
}
}
async function parseTable() {
try {
const html = await fetchDataWithRetry();
const $ = cheerio.load(html);
const result = [];
// Измените селекторы в зависимости от структуры HTML таблицы на сайте
$('table tr').each((index, element) => {
const coin = $(element).find('td').eq(0).text().trim(); // Выбираем ячейку с монетой
const level = $(element).find('td').eq(1).text().trim(); // Выбираем ячейку с процентом
if (coin && level) {
result.push({ coin, level });
}
});
return result;
} catch (error) {
console.error('Error parsing data:', error);
throw error;
}
}
// Команда для вывода таблицы
bot.onText(/\/table/, async (msg) => {
const chatId = msg.chat.id;
try {
const data = await parseTable();
if (data.length > 0) {
let message = 'Монета | До уровня, %\n';
message += '----------------------\n';
data.forEach(item => {
message += `${item.coin} | ${item.level}\n`;
});
bot.sendMessage(chatId, message);
} else {
bot.sendMessage(chatId, 'Таблица пуста или данные не найдены.');
}
} catch (error) {
bot.sendMessage(chatId, 'Произошла ошибка при получении данных. Попробуйте позже.');
}
});
ребят не хочет парсить что я не так делаю помоги подскажите
const cheerio = require('cheerio');
const TelegramBot = require('node-telegram-bot-api');
// Импортируем токен из key.js
const { token } = require('./key');
// Создаем экземпляр Telegram бота
const bot = new TelegramBot(token, { polling: true });
// URL сайта, который будем парсить
const url = 'https://trendcore.ru/'; // Замените на фактический URL
async function fetchData() {
try {
// Настраиваем запрос с увеличенным временем ожидания и пользовательским агентом
const response = await axios.get(url, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
},
timeout: 10000 // Таймаут 10 секунд
});
return response.data;
} catch (error) {
console.error('Error fetching data:', error);
throw error;
}
}
async function fetchDataWithRetry(retries = 3) {
for (let i = 0; i < retries; i++) {
try {
return await fetchData();
} catch (error) {
console.error(`Attempt ${i + 1} failed: ${error.message}`);
if (i === retries - 1) throw error;
await new Promise(resolve => setTimeout(resolve, 2000)); // Ожидание 2 секунды перед повторной попыткой
}
}
}
async function parseTable() {
try {
const html = await fetchDataWithRetry();
const $ = cheerio.load(html);
const result = [];
// Измените селекторы в зависимости от структуры HTML таблицы на сайте
$('table tr').each((index, element) => {
const coin = $(element).find('td').eq(0).text().trim(); // Выбираем ячейку с монетой
const level = $(element).find('td').eq(1).text().trim(); // Выбираем ячейку с процентом
if (coin && level) {
result.push({ coin, level });
}
});
return result;
} catch (error) {
console.error('Error parsing data:', error);
throw error;
}
}
// Команда для вывода таблицы
bot.onText(/\/table/, async (msg) => {
const chatId = msg.chat.id;
try {
const data = await parseTable();
if (data.length > 0) {
let message = 'Монета | До уровня, %\n';
message += '----------------------\n';
data.forEach(item => {
message += `${item.coin} | ${item.level}\n`;
});
bot.sendMessage(chatId, message);
} else {
bot.sendMessage(chatId, 'Таблица пуста или данные не найдены.');
}
} catch (error) {
bot.sendMessage(chatId, 'Произошла ошибка при получении данных. Попробуйте позже.');
}
});
ребят не хочет парсить что я не так делаю помоги подскажите
Лучший ответ
const axios = require('axios'); const cheerio = require('cheerio'); const TelegramBot = require('node-telegram-bot-api'); // Импортируем токен из key.js const { token } = require('./key'); // Создаем экземпляр Telegram бота const bot = new TelegramBot(token, { polling: true }); // URL сайта, который будем парсить const url = 'https://trendcore.ru/'; // Замените на фактический URL // Функция для получения данных с сайта async function fetchData() { try { const response = await axios.get(url, { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' }, timeout: 10000 // Таймаут 10 секунд }); return response.data; } catch (error) { console.error('Error fetching data:', error.message); throw error; } } // Функция для получения данных с повторными попытками async function fetchDataWithRetry(retries = 3) { for (let i = 0; i < retries; i++) { try { return await fetchData(); } catch (error) { console.error(`Attempt ${i + 1} failed: ${error.message}`); if (i === retries - 1) throw error; await new Promise(resolve => setTimeout(resolve, 2000)); // Ожидание 2 секунды перед повторной попыткой } } } // Функция для парсинга таблицы async function parseTable() { try { const html = await fetchDataWithRetry(); console.log('HTML загружен. Длина: ', html.length); const $ = cheerio.load(html); const result = []; // Измените селекторы в зависимости от структуры HTML таблицы на сайте $('table tr').each((index, element) => { const cells = $(element).find('td'); if (cells.length >= 2) { const coin = $(cells[0]).text().trim(); const level = $(cells[1]).text().trim(); if (coin && level) { result.push({ coin, level }); } } }); console.log('Результаты парсинга: ', result); return result; } catch (error) { console.error('Error parsing data:', error.message); throw error; } } // Команда для вывода таблицы bot.onText(/\/table/, async (msg) => { const chatId = msg.chat.id; try { const data = await parseTable(); if (data.length > 0) { let message = 'Монета | До уровня, %\n'; message += '----------------------\n'; data.forEach(item => { message += `${item.coin} | ${item.level}\n`; }); bot.sendMessage(chatId, message); } else { bot.sendMessage(chatId, 'Таблица пуста или данные не найдены.'); } } catch (error) { console.error('Error sending message:', error.message); bot.sendMessage(chatId, 'Произошла ошибка при получении данных. Попробуйте позже.'); } });
const axios = require('axios'); const cheerio = require('cheerio'); const TelegramBot = require('node-telegram-bot-api'); // Импортируем токен из key.js const { token } = require('./key'); // Создаем экземпляр Telegram бота const bot = new TelegramBot(token, { polling: true }); // URL сайта, который будем парсить const url = 'https://trendcore.ru/'; // Замените на фактический URL // Функция для получения данных с сайта async function fetchData() { try { const response = await axios.get(url, { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' }, timeout: 10000 // Таймаут 10 секунд }); return response.data; } catch (error) { console.error(`Error fetching data: ${error.message}`); throw error; } } // Функция для получения данных с повторными попытками async function fetchDataWithRetry(retries = 3) { for (let i = 0; i < retries; i++) { try { return await fetchData(); } catch (error) { console.error(`Attempt ${i + 1} failed: ${error.message}`); if (i === retries - 1) throw error; await new Promise(resolve => setTimeout(resolve, 2000)); // Ожидание 2 секунды перед повторной попыткой } } } // Функция для парсинга таблицы async function parseTable() { try { const html = await fetchDataWithRetry(); console.log('HTML загружен. Длина: ', html.length); const $ = cheerio.load(html); const result = []; // Измените селекторы в зависимости от структуры HTML таблицы на сайте $('table tr').each((index, element) => { const cells = $(element).find('td'); if (cells.length >= 2) { const coin = $(cells[0]).text().trim(); const level = $(cells[1]).text().trim(); if (coin && level) { result.push({ coin, level }); } } }); if (result.length === 0) { console.warn('Таблица не содержит данных.'); } return result; } catch (error) { console.error(`Error parsing data: ${error.message}`); throw error; } } // Команда для вывода таблицы bot.onText(/\/table/, async (msg) => { const chatId = msg.chat.id; try { const data = await parseTable(); if (data.length > 0) { let message = 'Монета | До уровня, %\n'; message += '----------------------\n'; data.forEach(item => { message += `${item.coin} | ${item.level}\n`; }); await bot.sendMessage(chatId, message); } else { await bot.sendMessage(chatId, 'Таблица пуста или данные не найдены.'); } } catch (error) { console.error(`Error sending message: ${error.message}`); await bot.sendMessage(chatId, 'Произошла ошибка при получении данных. Попробуйте позже.'); } });
const axios = require('axios'); const cheerio = require('cheerio'); const TelegramBot = require('node-telegram-bot-api'); // Импортируем токен из key.js const { token } = require('./key'); // Создаем экземпляр Telegram бота const bot = new TelegramBot(token, { polling: true }); // URL сайта, который будем парсить const url = 'https://trendcore.ru/'; // Замените на фактический URL // Функция для получения данных с сайта async function fetchData() { try { const response = await axios.get(url, { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' }, timeout: 10000 // Таймаут 10 секунд }); return response.data; } catch (error) { console.error(`Ошибка получения данных: ${error.message}`); throw new Error('Не удалось получить данные с сайта.'); } } // Функция для получения данных с повторными попытками async function fetchDataWithRetry(retries = 3) { for (let attempt = 1; attempt <= retries; attempt++) { try { return await fetchData(); } catch (error) { console.error(`Попытка ${attempt} не удалась: ${error.message}`); if (attempt === retries) throw error; await new Promise(resolve => setTimeout(resolve, 2000)); // Ожидание 2 секунды перед повторной попыткой } } } // Функция для парсинга таблицы async function parseTable() { try { const html = await fetchDataWithRetry(); const $ = cheerio.load(html); const result = []; $('table tr').each((_, element) => { const cells = $(element).find('td'); if (cells.length >= 2) { const coin = $(cells[0]).text().trim(); const level = $(cells[1]).text().trim(); if (coin && level) { result.push({ coin, level }); } } }); if (result.length === 0) { console.warn('Таблица не содержит данных.'); } return result; } catch (error) { console.error(`Ошибка парсинга данных: ${error.message}`); throw new Error('Не удалось разобрать данные с сайта.'); } } // Функция для отправки сообщений async function sendMessage(chatId, message) { try { await bot.sendMessage(chatId, message); } catch (error) { console.error(`Ошибка отправки сообщения: ${error.message}`); } } // Команда для вывода таблицы bot.onText(/\/table/, async (msg) => { const chatId = msg.chat.id; try { const data = await parseTable(); if (data.length > 0) { let message = 'Монета | До уровня, %\n'; message += '----------------------\n'; data.forEach(item => { message += `${item.coin} | ${item.level}\n`; }); await sendMessage(chatId, message); } else { await sendMessage(chatId, 'Таблица пуста или данные не найдены.'); } } catch (error) { await sendMessage(chatId, 'Произошла ошибка при получении данных. Попробуйте позже.'); } });

Attempt 1 failed: timeout of 10000ms exceeded
Error fetching data: timeout of 10000ms exceeded
Attempt 2 failed: timeout of 10000ms exceeded
Error fetching data: timeout of 10000ms exceeded
Attempt 3 failed: timeout of 10000ms exceeded
Error parsing data: timeout of 10000ms exceeded
Error sending message: timeout of 10000ms exceeded
вот так выходит мне надо как то парсить там таблицу данные но не получается

Попытка 1 не удалась: Не удалось получить данные с сайта.
const puppeteer = require('puppeteer'); const TelegramBot = require('node-telegram-bot-api'); const { token } = require('./key'); // Создаем экземпляр Telegram бота const bot = new TelegramBot(token, { polling: true }); // URL сайта const url = 'https://trendcore.ru/'; // Замените на фактический URL async function fetchData() { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(url, { waitUntil: 'networkidle2' }); const html = await page.content(); await browser.close(); return html; } async function parseTable() { try { const html = await fetchData(); const $ = cheerio.load(html); const result = []; $('table tr').each((_, element) => { const cells = $(element).find('td'); if (cells.length >= 2) { const coin = $(cells[0]).text().trim(); const level = $(cells[1]).text().trim(); if (coin && level) { result.push({ coin, level }); } } }); if (result.length === 0) { console.warn('Таблица не содержит данных.'); } return result; } catch (error) { console.error(`Ошибка парсинга данных: ${error.message}`); throw new Error('Не удалось разобрать данные с сайта.'); } } // Команда для вывода таблицы bot.onText(/\/table/, async (msg) => { const chatId = msg.chat.id; try { const data = await parseTable(); if (data.length > 0) { let message = 'Монета | До уровня, %\n'; message += '----------------------\n'; data.forEach(item => { message += `${item.coin} | ${item.level}\n`; }); await bot.sendMessage(chatId, message); } else { await bot.sendMessage(chatId, 'Таблица пуста или данные не найдены.'); } } catch (error) { console.error(`Ошибка отправки сообщения: ${error.message}`); await bot.sendMessage(chatId, 'Произошла ошибка при получении данных. Попробуйте позже.'); } });
const axios = require('axios'); const cheerio = require('cheerio'); const TelegramBot = require('node-telegram-bot-api'); const puppeteer = require('puppeteer'); const { token } = require('./key'); // Создаем экземпляр Telegram бота const bot = new TelegramBot(token, { polling: true }); // URL сайта, который будем парсить const url = 'https://trendcore.ru/'; // Замените на фактический URL // Прокси сервер const proxy = 'http://your-proxy-server:port'; // Замените на ваш прокси // Настройки заголовков const headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Accept-Language': 'en-US,en;q=0.9', }; // Функция для получения данных с сайта через прокси async function fetchData() { try { const response = await axios.get(url, { headers, proxy: { host: 'your-proxy-server', port: port, // Замените на порт вашего прокси }, timeout: 30000 // Таймаут 30 секунд }); return response.data; } catch (error) { console.error(`Ошибка получения данных: ${error.message}`); throw new Error('Не удалось получить данные с сайта.'); } } // Функция для получения данных с повторными попытками async function fetchDataWithRetry(retries = 3) { for (let attempt = 1; attempt <= retries; attempt++) { try { return await fetchData(); } catch (error) { console.error(`Попытка ${attempt} не удалась: ${error.message}`); if (attempt === retries) throw error; await new Promise(resolve => setTimeout(resolve, 2000)); // Ожидание 2 секунды перед повторной попыткой } } } // Функция для парсинга таблицы async function parseTable() { try { const html = await fetchDataWithRetry(); const $ = cheerio.load(html); const result = []; $('table tr').each((_, element) => { const cells = $(element).find('td'); if (cells.length >= 2) { const coin = $(cells[0]).text().trim(); const level = $(cells[1]).text().trim(); if (coin && level) { result.push({ coin, level }); } } }); if (result.length === 0) { console.warn('Таблица не содержит данных.'); } return result; } catch (error) { console.error(`Ошибка парсинга данных: ${error.message}`); throw new Error('Не удалось разобрать данные с сайта.'); } } // Функция для отправки сообщений async function sendMessage(chatId, message) { try { await bot.sendMessage(chatId, message); } catch (error) { console.error(`Ошибка отправки сообщения: ${error.message}`); } } // Команда для вывода таблицы bot.onText(/\/table/, async (msg) => { const chatId = msg.chat.id; try { const data = await parseTable(); if (data.length > 0) { let message = 'Монета | До уровня, %\n'; message += '----------------------\n'; data.forEach(item => { message += `${item.coin} | ${item.level}\n`; }); await sendMessage(chatId, message); } else { await sendMessage(chatId, 'Таблица пуста или данные не найдены.'); } } catch (error) { await sendMessage(chatId, 'Произошла ошибка при получении данных. Попробуйте позже.'); } });
npm install axios cheerio node-telegram-bot-api puppeteer
Стр.: 1, 2