Merhabalar bir bot yapıyorum veri çekiyor geliyor veritabanına yazıyor. Basit anlatımı bu şekilde ama sorunum şu ben verileri vs alıyorum aslında sorun veritabanına kaydetmede neden olduğunu anlayamadım.
Kullanılan : puppeteer
Dosya Yapım :
botjs/
|-- controllers/
| |-- product.js
|
|-- database/
| |-- db.js
|
|-- productBot/
| |-- bot.js
|
|-- routes/
| |-- product.js
|
|-- index.js
Bot.js içeriği
// productBot/bot.js
const puppeteer = require('puppeteer');
const { createproduct, queryproduct } = require('../controllers/product.js');
const scrape = async () => {
try {
const queryResults = await queryproduct();
const pznNumbers = queryResults.map(result => result.query_pzn);
console.log("Ne varmış : ",pznNumbers);
for (const pznno of pznNumbers) {
await scrapeDetails(pznno);
}
console.log("Tüm scrape işlemleri tamamlandı");
} catch (error) {
console.error("Hata oluştu:", error);
}
};
const scrapeDetails = async (pznno) => {
const url = `url=${pznno}`;
const browser = await puppeteer.launch({ headless: 'new' });
const page = await browser.newPage();
await page.goto(url);
try {
const tableSelector = 'table.products';
await page.waitForSelector(tableSelector);
const products = await page.$$eval(`${tableSelector} tbody tr`, rows => {
return rows.map(row => {
...... Burada çekilen veriler var
};
return productDetails;
});
});
const jsonData = JSON.stringify(products, null, 2);
createproduct(jsonData);
console.log('createproduct fonksiyonu çağrıldı:', jsonData);
} catch (error) {
console.error(`Hata: Tablo bulunamadı - ${error.message}`);
}
browser.close();
}
scrape();verikaydetme yeri.
// controllers/product.js içeriği
const mysql = require('mysql');
const dbConnection = require('../database/db.js');
const productData = require('../productBot/bot.js')
const queryproduct = () => {
return new Promise((resolve, reject) => {
const queryData = "SELECT * FROM tablo_pzn";
dbConnection.query(queryData, (err, results) => {
if (err) {
reject(err);
} else {
resolve(results);
}
});
});
};
const getproduct = (req, res) => {
try {
const query = 'SELECT * FROM ilaclar';
dbConnection.query(query, (err, results) => {
if (err) {
console.error('Sorgu hatası:', err.stack);
return res.status(500).json({ error: 'Veritabanı sorgusu gerçekleştirilemedi' });
}
console.log('Sorgu Sonuçları:', results);
// Sorgu sonuçları
return res.json({
status: "OK",
message: "İlaç bilgileri başarıyla alındı.",
data: results
});
});
} catch (error) {
console.error('İşlem hatası:', error);
return res.status(500).json({ error: 'Bir hata oluştu' });
}
}
const createproduct = (productData) => {
try {
const productDetails = JSON.parse(productData);
console.log("Create Product productDetails :",productDetails);
const insertQuery = 'INSERT INTO ilaclar (title, prescription, unit, origin, manufacturer, price, unitPrice, link) VALUES (?, ?, ?, ?, ?, ?, ?, ?)';
const values = [
... gelen verilerin içeriği
];
dbConnection.query(insertQuery, values, (err, results) => {
if (err) {
console.error('Veri eklenirken hata oluştu:', err.stack);
return;
}
console.log('Veri başarıyla eklendi.', results.insertId);
});
} catch (error) {
console.error('JSON dönüşüm hatası:', error);
}
};
module.exports = { getproduct, createproduct, queryproduct };