我目前正在尝试从Github的趋势页面中获取所有趋势库以及它们拥有的星星,并从中创建一个文本文件。网址为this

我也使用Puppeteer。

对于存储库列表,我这样做

const data = await page.evaluate(()=>{
        const tds =Array.from(document.querySelectorAll('.explore-content ol li div h3'));
        return tds.map(td => td.textContent);
    });


这给我这样的结果

The top repositories are

    charlax / professional-programming
,

    ssloy / tinyraytracer
,

    komeiji-satori / Dress
,

    ForrestKnight / open-source-cs
,

    hjacobs / kubernetes-failure-stories
,

    osforscience / deep-learning-ocean
,

    alexkimxyz / nsfw_data_scrapper
,

    kamranahmedse / developer-roadmap
,

    typescript-eslint / typescript-eslint
,

    Musish / Musish
,

    MisterBooo / LeetCodeAnimation
,

    yagiz / Bagel
,

    SpaceVim / SpaceVim
,

    antonmedv / fx
,

    pjialin / py12306
,

    braver / programmingfonts
,

    macrozheng / mall
,

    Snailclimb / JavaGuide
,

    schollz / howmanypeoplearearound
,

    flutterchina / flutter-in-action
,

    flutter / flutter
,

    rikschennink / shiny
,

    doocs / advanced-java
,

    MFatihMAR / Awesome-Game-Networking
,

    go-task / task


为了得到星星,我还有另一个功能

const stars = await page.evaluate(()=>{
        const stars = Array.from(document.querySelectorAll('.explore-content ol li div:nth-child(4) a'));
        return stars.map(star=>star.textContent);

    });


以这种方式输出

顶级仓库有

    5,304
  ,

    379
  ,
          ,,,,,,

    1,173
  ,

    44


我想将两个方法的输出合并到一个方法中,以便获得如下结果


  
    charlax / professional-programming有5304星。
  


如何合并datastars方法的输出,或者如何在一个方法中进行两种不同的操作。我可以在一个map方法中执行两个模拟操作吗?如果可以,怎么办?

最佳答案

也许这样做更安全:

const data = await page.evaluate(() => {
  const exctactedData = [];
  for (const entry of document.querySelectorAll('ol.repo-list > li')) {
    exctactedData.push(`${
      entry.querySelector('h3').innerText
    } has ${
      entry.querySelector('a[href$="/stargazers"]').innerText.trim()
    } stars.`);
  }
  return exctactedData.join('\n');
});

10-05 20:55