首页 > 解决方案 > 怎么刮里面

使用 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')

标签: javascripthtmlweb-scrapingpuppeteer

解决方案


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 ' ]


推荐阅读