如何使用 puppeteer 在 <div> 列表中进行抓取
How to scrape inside <div> list using 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
API关系不大。在现代浏览器 (ES6) 上,转换为数组很优雅,然后只需映射它。请注意,我假设 nameToRetrieve
仅出现在您要检索的内容中,因此无需获取 "list"
.
var names = Array.from(document.getElementsByClassName("nameToRetrieve")).map(x => x.innerHTML);
console.log(names)
<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>
在 puppeteer 中有一个特殊的方便方法 page.$$eval
用于此任务:
let result = await page.$$eval('.nameToRetrieve', names => names.map(name => name.textContent));
console.log(result);
This method runs Array.from(document.querySelectorAll(selector)) within the page and passes it as the first argument to pageFunction.
结果将是:
[ ' Name 1 ', ' Name 2 ', ' Name 3 ' ]
我正在寻找一种方法来使用 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
API关系不大。在现代浏览器 (ES6) 上,转换为数组很优雅,然后只需映射它。请注意,我假设 nameToRetrieve
仅出现在您要检索的内容中,因此无需获取 "list"
.
var names = Array.from(document.getElementsByClassName("nameToRetrieve")).map(x => x.innerHTML);
console.log(names)
<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>
在 puppeteer 中有一个特殊的方便方法 page.$$eval
用于此任务:
let result = await page.$$eval('.nameToRetrieve', names => names.map(name => name.textContent));
console.log(result);
This method runs Array.from(document.querySelectorAll(selector)) within the page and passes it as the first argument to pageFunction.
结果将是:
[ ' Name 1 ', ' Name 2 ', ' Name 3 ' ]