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, 'Произошла ошибка при получении данных. Попробуйте позже.');
}
});
Серега , 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
вот так выходит мне надо как то парсить там таблицу данные но не получается
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 не удалась: Не удалось получить данные с сайта.
Попытка 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