javascript - 网页抓取:使用 puppeteer 遍历网页应用的每一页
问题描述
我是一个完整的初学者,javascript
我puppeteer
正在尝试从 bulapedia 网站获取前 151 个 pokemon 描述 在下https://en.wikipedia.org/wiki/List_of_generation_I_Pok%C3%A9mon
图中,我复制了单个 pokemon 实例的蓝色标记元素的 XPath,它是我想要显示的文本
使用下面的代码,我可以成功地抓取元素并在一个json
值中显示文本,但我一次只能手动处理一个口袋妖怪。我想要的是用来puppeteer
遍历每个页面并对前 151 个口袋妖怪执行此操作
我的代码:
const puppeteer = require('puppeteer');
async function getDesc(url){
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url);
//xpath of the selected text above in the pic
const [el] = await page.$x('//*[@id="mw-content-text"]/table[5]/tbody/tr[1]/td/table/tbody/tr[2]/td/table/tbody/tr[1]/td');
const text = await el.getProperty('textContent');
srcTxt = await text.jsonValue();
console.log({srcTxt});
browser.close();
}
//give url for a specific pokemon as input
getDesc('https://bulbapedia.bulbagarden.net/wiki/Bulbasaur_(Pok%C3%A9mon)');
我相信为每个 pokemon 实例遍历每个 url 的 for 循环是解决方案。但是我不知道如何使用 puppeteer 来实现这一点,我将不胜感激。先感谢您 。
解决方案
如果你有一个 URL 数组,你可以尝试这样的事情:
'use strict';
const puppeteer = require('puppeteer');
(async function main() {
try {
const browser = await puppeteer.launch();
const [page] = await browser.pages();
const urls = ['https://example.org/1', 'https://example.org/2'];
const allData = [];
for (const url of urls) {
await page.goto(url);
const data = await page.evaluate(() => {
return document.querySelector('a').innerText;
});
allData.push(data);
}
console.log(allData);
await browser.close();
} catch (err) {
console.error(err);
}
})();
推荐阅读
- adfs - 拥有多个 ADFS 声明提供程序时的挑战
- json - Jasper 报告中的 JSON 作为 subDataSource
- java - Spring Boot 外部属性不适用于 Boot 2.0.0.RELEASE,里面有 spring 批处理
- javascript - KonvaJS transform rotation around center on SVG
- sql - 密集排名未正确生成行
- c++ - 如何将 char 数组字符串存储到 char 型指针数组?C++
- javascript - onclick 中指定的功能未在移动设备上触发
- azure - 在 SQL Server 部署任务中设置 Azure Pipeline 变量值
- resampling - Google Earth Engine (gee) reduceResolution() 平铺尺寸错误
- r - 我可以将数组或类似的数据结构作为数据框的元素吗?