Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

405
Views
Paginación Web Scrape en una sola URL (cheerio y axios)

novato aquí. Estaba en un proyecto de web scraping. Y quería alguna guía sobre la técnica de paginación de web scraping. Estoy raspando este sitio https://www.iney.my/unit-trust-investments . Como puede ver, quería recuperar diferentes porcentajes de "Retorno total" basados en X años. En este momento estoy usando Cheerio y Axios.

 const http = require("http"); const axios = require("axios"); const cheerio = require("cheerio"); http .createServer(async function (_, res) { try { const response = await axios.get( "https://www.imoney.my/unit-trust-investments" ); const $ = cheerio.load(response.data); const funds = []; $("[class='list-item']").each((_i, row) => { const $row = $(row); const fund = $row.find("[class*='product-title']").find("a").text(); const price = $row.find("[class*='is-narrow product-profit']").find("b").text(); const risk = $row.find("[class*='product-title']").find("[class*='font-xsm extra-info']").text().replace('/10','');; const totalreturn = $row.find("[class*='product-return']").find("[class='font-lg']").find("b").text().replace('%',''); funds.push({ fund, price, risk, totalreturn}); }); res.statusCode = 200; res.write(JSON.stringify(funds, null, 4)); } catch (err) { res.statusCode = 400; res.write("Unable to process request."); } res.end(); }) .listen(8080);

tenga en cuenta que la URL no cambia cuando se selecciona un año diferente, solo se cambia el valor del rendimiento total

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Esto sucede porque la página usa javascript para generar el contenido. En este caso, necesitas algo como Titiritero. Eso es lo que necesitas:

 const puppeteer = require("puppeteer"); const availableFunds = "10000"; const years = 2; // 3 for 0.5 years; 2 for 1 year; 1 for 2 years, 0 for 3 years. async function start() { const browser = await puppeteer.launch({ headless: false, }); const page = await browser.newPage(); await page.goto("https://www.imoney.my/unit-trust-investments"); await page.waitForSelector(".product-item"); await page.focus("#amount"); for (let i = 0; i < 5; i++) { await page.keyboard.press("Backspace"); } await page.type("#amount", availableFunds); await page.click("#tenure"); for (let i = 0; i < years; i++) { await page.keyboard.press("ArrowUp"); } await page.keyboard.press("Enter"); const funds = await page.evaluate(() => { const funds = []; Array.from(document.querySelectorAll(".product-item")).forEach((el) => { const fund = el.querySelector(".title")?.textContent.trim(); const price = el.querySelector(".investmentReturnValue")?.textContent.trim(); const risk = el.querySelector(".col-title .info-desc dd")?.textContent.trim(); const totalreturn = el.querySelector(".col-rate.text-left .info-desc .ir-value")?.textContent.trim(); if (fund && price && risk && totalreturn) funds.push({ fund, price, risk, totalreturn }); }); return funds; }); console.log(funds); browser.close(); } start();

Producción:

 [ { fund: 'Aberdeen Standard Islamic World Equity Fund - Class A', price: 'RM 12,651.20', risk: 'Medium\n 7/10', totalreturn: '26.51' }, { fund: 'Affin Hwang Select Balanced Fund', price: 'RM 10,355.52', risk: 'Medium\n 5/10', totalreturn: '3.56' }, ... and others
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!