Loading...
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, 'Произошла ошибка при получении данных. Попробуйте позже.');

}
});

ребят не хочет парсить что я не так делаю помоги подскажите
Лучший ответ
javascript
   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, 'Произошла ошибка при получении данных. Попробуйте позже.');   } });   
javascript
   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, 'Произошла ошибка при получении данных. Попробуйте позже.');   } });   
javascript
   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, 'Произошла ошибка при получении данных. Попробуйте позже.');   } });   
Серега , Error fetching data: timeout of 10000ms exceeded
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
вот так выходит мне надо как то парсить там таблицу данные но не получается
Серега , Ошибка получения данных: timeout of 10000ms exceeded
Попытка 1 не удалась: Не удалось получить данные с сайта.
Серега , Может надо через прокси ?
javascript
   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, 'Произошла ошибка при получении данных. Попробуйте позже.');   } });   
javascript
   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, 'Произошла ошибка при получении данных. Попробуйте позже.');   } });   
apache
   npm install axios cheerio node-telegram-bot-api puppeteer   
Онлайн: 4
Время:
Gen. 0.1186
(c) Bym.Guru 2010-2026