我的抓取工具仅采用第一个类/类名实例,而不采用页面上的其余实例
我尝试使用普通的for循环而不是for-each,我认为这是因为div具有唯一的类名,该类名会增加设置值。我尝试在循环中增加该值,但无济于事。
const puppeteer = require("puppeteer");
const siteUrl = "https://toronto.iabc.com/about/pic/pic-member-list/";
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.setViewport({ width: 1920, height: 926 });
await page.goto(siteUrl);
//getting details of member list
const siteData = await page.evaluate(() => {
const pageData = [];
//get page elements
const pageElms = document.querySelectorAll(
"body > div.site-container > div.site-inner > div > main > article"
);
let num = 3;
//parse data from elements
const scraper = pageElms.forEach(element => {
let nextPerson = (num += 2);
const pageJson = {};
try {
if (nextPerson > 50) {
return pageData;
}
pageJson.name = element.querySelector(
`body > div.site-container > div.site-inner > div > main > article > div > div:nth-child(${nextPerson}) > div:nth-child(1) > div`
).innerText;
scraper();
} catch (err) {
console.log(err);
}
pageData.push(pageJson);
console.log(pageData);
});
return pageData;
});
console.dir(siteData);
})();
最后,我应该可以通过一些调整从列表中抓取每个人,以指定我要抓取的选择器。
答案 0 :(得分:0)
您共享的页面中只有一个文章标签。因此,在这里,循环实际上没有任何意义。我也建议您在问题中加入标记。
如果您将初始选择器更改为以下内容,则我将信息定位到其中的行
const pageElms = document.querySelectorAll(
"body > div.site-container > div.site-inner > div > main > article > div > div.su-row"
);
并使用
pageJson.name = element.innerText;
您不需要生成nextPerson,将抓取所有数据