javascript - 怎么刮里面使用 puppeteer 列出
问题描述
我正在寻找一种使用puppeteer 有效地抓取以下列方式格式化的信息的方法。 假设我有一个网站上的东西列表,划分如下:
<div id="list">
<div class="item" pos="0">
<a href="www.somewebsite.com">
<div class="nameToRetrieve"> Name 1 </div>
</div>
<div class="item" pos="1">
<a href="www.somewebsite.com">
<div class="nameToRetrieve"> Name 2 </div>
</div>
<div class="item" pos="2">
<a href="www.somewebsite.com">
<div class="nameToRetrieve"> Name 3 </div>
</div>
</div>
如何检索名称的信息(名称 1、名称 2 和名称 3?
我已经尝试将它们放入一个对象中,然后放入一个数组中,但我仍然对如何处理它感到困惑。
const listOfStuff = document.getElementById('list').getElementsByClassName('itemResult')
解决方案
puppeteer 中有一个特殊的便捷方法page.$$eval
可以完成这个任务:
let result = await page.$$eval('.nameToRetrieve', names => names.map(name => name.textContent));
console.log(result);
此方法在页面内运行 Array.from(document.querySelectorAll(selector)) 并将其作为第一个参数传递给 pageFunction。
结果将是:
[ ' Name 1 ', ' Name 2 ', ' Name 3 ' ]
推荐阅读
- python - 无法移动/删除电子邮件但可以复制它
- python - 无法为 Python 3.6 重新编译 webbots
- windows - Windows 上的 Redis 安装失败
- java - 如何从 javafx 中的另一个类将数据写入 .txt 文件(FileWriter)
- keras - 我的残差神经网络给出了一个非常奇怪的深度图作为输出。我不知道如何改进我的模型?
- python - 如何在不同列上加入具有多个条件的 DataFrame?
- webpack - 从节点模块导入 ES6 代码不能开玩笑
- postgresql - 计算平均体重增加
- java - 调用 menuitems 来触发单独的代码块
- javascript - 如何使用 JS 和 onclick 按钮更改段落颜色?