我目前正在尝试从 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
我想将两个方法的输出合并在一个方法中,以便我可以获得结果
block 引用>charlax/professional-programming has 5,304 stars.
如何组合
data
的输出和stars
方法或者我如何在一个方法中执行两个不同的操作。我可以在一个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');
});
关于javascript - 如何在 Javascript 中的单个 map 函数内执行两个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54301991/