gpt4 book ai didi

javascript - puppeteer 获取 href 数组,然后遍历每个 href 和该页面上的 href

转载 作者:行者123 更新时间:2023-12-03 12:17:26 71 4
gpt4 key购买 nike

我正在尝试通过 node.js 中的 puppeteer 抓取数据

目前,我正在寻找一个脚本,用于抓取 well.ca 某个部分中的所有数据

现在,这是我试图通过 node.js 实现的方法/逻辑

1 - 前往网站的医学健康部分

2 - 使用 dom 选择器获取 href 数组来自 .panel-body-content通过 dom 选择器 panel-body-content a[href] 抓取小节

3 - 使用 for 循环遍历每个链接(子部分)

4 对于每个小节链接,通过为每个类获取值为 col-lg-5ths col-md-3 col-sm-4 col-xs-6 的 href,为每个产品获取另一个 href 数组。通过.col-lg-5ths col-md-3 col-sm-4 col-xs-6 a[href]

5 - 遍历小节中的每个产品

6 - 抓取每个产品的数据

目前,我已经编写了上面的大部分代码:

const puppeteer = require('puppeteer');
const chromeOptions = {
headless: false,
defaultViewport: null,
};
(async function main() {
const browser = await puppeteer.launch(chromeOptions);
try {
const page = await browser.newPage();
await page.goto("https://well.ca/categories/medicine-health_2.html");
console.log("::::::: OPEN WELL ::::::::::");

// href attribute
const hrefs1 = await page.evaluate(
() => Array.from(
document.querySelectorAll('.panel-body-content a[href]'),
a => a.getAttribute('href')
)
);

console.log(hrefs1);

const urls = hrefs1

for (let i = 0; i < urls.length; i++) {
const url = urls[i];
await page.goto(url);
}
const hrefs2 = await page.evaluate(
() => Array.from(
document.querySelectorAll('.col-lg-5ths col-md-3 col-sm-4 col-xs-6 a[href]'),
a => a.getAttribute('href')
)
);

当我尝试为每个产品的每个 href 获取一个数组时,我在数组中什么也没有收到。

我如何添加一个嵌套的 for 循环,以获取每个子部分中每个产品的所有 href 的数组,然后访问每个产品链接?

获取类 .col-lg-5ths col-md-3 col-sm-4 col-xs-6 中所有 href 的正确 dom 选择器是什么? ID product_grid_link

如果我想添加一个后续循环以通过每个子部分的产品 href 从每个产品中获取信息,我该如何将其嵌入到代码中?

任何帮助将不胜感激

最佳答案

似乎有些链接是重复的,所以最好收集最终页面的所有链接,删除链接列表,然后抓取最终页面。 (您也可以将最终页面的链接保存在文件中以备后用。)此脚本收集了 5395 个链接(去重)。

'use strict';

const puppeteer = require('puppeteer');

(async function main() {
try {
const browser = await puppeteer.launch({ headless: false, defaultViewport: null });
const [page] = await browser.pages();

await page.goto('https://well.ca/categories/medicine-health_2.html');

const hrefsCategoriesDeduped = new Set(await page.evaluate(
() => Array.from(
document.querySelectorAll('.panel-body-content a[href]'),
a => a.href
)
));

const hrefsPages = [];

for (const url of hrefsCategoriesDeduped) {
await page.goto(url);
hrefsPages.push(...await page.evaluate(
() => Array.from(
document.querySelectorAll('.col-lg-5ths.col-md-3.col-sm-4.col-xs-6 a[href]'),
a => a.href
)
));
}

const hrefsPagesDeduped = new Set(hrefsPages);

// hrefsPagesDeduped can be converted back to an array
// and saved in a JSON file now if needed.

for (const url of hrefsPagesDeduped) {
await page.goto(url);

// Scrape the page.
}

await browser.close();
} catch (err) {
console.error(err);
}
})();

关于javascript - puppeteer 获取 href 数组,然后遍历每个 href 和该页面上的 href,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62689746/

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