Saya mencoba membuat scraper sederhana yang akan mengikis situs Profil Trailblazer. Saya ingin mendapatkan jumlah lencana dan poin pengguna.

Jadi saya menggunakan cheerio dan dalang untuk mencapai ini.

Ini kode saya -->

 .get("/:profile", (req,res,next) => {

  const url = "https://trailblazer.me/id/hverma99";

  async function getPage(url) {
    const browser = await puppeteer.launch({headless: true});
    const page = await browser.newPage();
    await page.goto(url, {waitUntil: 'networkidle0'});

    const html = await page.content(); // serialized HTML of page DOM.
    await browser.close();
    return html;
  }

  const html = getPage(url);
  const $ = cheerio.load(html);
  const span = $('.tds-tally__count.tds-tally__count_success');
  console.log(span.text());

});

Parameter profil tidak digunakan pada saat ini karena saya hanya menguji ini.

Masalah : Setiap kali saya menjalankan kode ini, saya tidak mendapatkan apa pun yang tercetak di konsol dan jika saya mencoba tanpa dalang maka saya hanya mendapatkan html tanpa data apa pun. Hasil yang saya harapkan adalah jumlah lencana dan poin.

Beri tahu saya apa yang salah dengan kode ini.

Terima kasih

2
Maverick 8 Maret 2020, 20:05

1 menjawab

Jawaban Terbaik

Semuanya benar. Yang harus Anda lakukan adalah await panggilan getPage Anda karena asinkron. coba ini

.get("/:profile", async (req,res,next) => {

  const url = "https://trailblazer.me/id/hverma99";

  async function getPage(url) {
    const browser = await puppeteer.launch({headless: true});
    const page = await browser.newPage();
    await page.goto(url, {waitUntil: 'networkidle0'});

    const html = await page.content(); // serialized HTML of page DOM.
    await browser.close();
    return html;
  }

  const html = await getPage(url);
  const $ = cheerio.load(html);
  const span = $('.tds-tally__count.tds-tally__count_success');
  console.log(span.text());

});

Juga perlu menempatkan async seperti ini - async (req,res,next)

2
Ashish Modi 8 Maret 2020, 17:57