gpt4 book ai didi

javascript - 网页抓取 : iterate through every page of web app using puppeteer

转载 作者:行者123 更新时间:2023-12-04 09:31:01 26 4
gpt4 key购买 nike

我是一个完整的初学者 javascriptpuppeteer我试图从bulbapedia网站https://en.wikipedia.org/wiki/List_of_generation_I_Pok%C3%A9mon获取前151个口袋妖怪的描述
在下图中,我复制了单个 pokemon 实例的蓝色标记元素的 XPath,这是我要显示的文本
enter image description here
使用下面的代码,我可以成功抓取元素并在 json 中显示文本。值,但我一次只能手动为一个 pokemon 执行此操作。我想要的是使用 puppeteer遍历每个页面并对前 151 个 pokemon 执行此操作
我的代码:

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);
}
})();

关于javascript - 网页抓取 : iterate through every page of web app using puppeteer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62842825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com