import puppeteer from 'puppeteer'; import Listing from '../../server/db/models/Listing'; //import { notifyNewListing } from './telegramBot'; export default async function scrapePisoscom() { console.log('Starting Pisos.com scraping process'); const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'] }); const page = await browser.newPage(); try { await page.goto('https://www.pisos.com/venta/pisos-area_de_granada_granada_capital/', { waitUntil: 'networkidle2', }); console.log('Navigated to Pisos.com'); const listings = await page.evaluate(() => { const results = []; document.querySelectorAll('.ad-preview').forEach((element) => { const title = element.querySelector('.ad-preview__title').innerText.trim(); const priceText = element.querySelector('.ad-preview__price').innerText.trim(); const price = parseFloat(priceText.replace(/[^\d]/g, '')); const location = element.querySelector('.ad-preview__subtitle').innerText.trim(); const description = element.querySelector('.ad-preview__description').innerText.trim(); const phone = element.querySelector('.contact-box__phone').getAttribute('data-number'); const url = element.getAttribute('data-lnk-href'); if (title && price && location && description && url) { results.push({ title, price, location, description, url, phone }); } }); return results; }); console.log(`Found ${listings.length} listings. Listing data: ${JSON.stringify(listings)}`); for (const listingData of listings) { try { const listing = new Listing(listingData); //await listing.save(); console.log(`Saved listing to database: ${listing.title}`); //await notifyNewListing(listing); console.log(`Sent notification for listing: ${listing.title}`); } catch (innerError) { console.error(`Error processing listing: ${innerError.message}`); } } } catch (error) { console.error('Error scraping Pisos.com:', error.message); throw new Error('Failed to scrape Pisos.com'); } finally { await browser.close(); console.log('Finished Pisos.com scraping process'); } }