目標(biāo) ——從首頁(yè)抓取所有書名和價(jià)格,并以數(shù)組形式返回。這是我最終的輸出結(jié)果:
開(kāi)始!看看您是否可以自己完成此任務(wù)。與我們剛創(chuàng)建的上述程序非常相似,如果卡住,請(qǐng)向下滾動(dòng)…
GO! See if you can accomplish this on your own. It’s very similar to the above program we just created. Scroll down if you get stuck…
提示:
此挑戰(zhàn)與上一個(gè)示例之間的主要區(qū)別是需要遍歷大量結(jié)果。您可以按照以下方法設(shè)置代碼來(lái)做到這一點(diǎn):
const result = await page.evaluate(() => {
let data = []; // 創(chuàng)建一個(gè)空數(shù)組
let elements = document.querySelectorAll('xxx'); // 選擇全部
// 遍歷每一個(gè)產(chǎn)品
// 選擇標(biāo)題
// 選擇價(jià)格
data.push({title, price}); // 將數(shù)據(jù)放到數(shù)組里, 返回?cái)?shù)據(jù);
// 返回?cái)?shù)據(jù)數(shù)組
});
如果您不明白,沒(méi)事!這是一個(gè)棘手的問(wèn)題…… 這是一種可能的解決方案。在以后的文章中,我將深入研究此代碼及其工作方式,我們還將介紹更高級(jí)的抓取技術(shù)。如果您想收到通知,請(qǐng)務(wù)必 在此處輸入您的電子郵件 。
方案:
const puppeteer = require('puppeteer');
let scrape = async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('http://books.toscrape.com/');
const result = await page.evaluate(() => {
let data = []; // 創(chuàng)建一個(gè)空數(shù)組, 用來(lái)存儲(chǔ)數(shù)據(jù)
let elements = document.querySelectorAll('.product_pod'); // 選擇所有產(chǎn)品
for (var element of elements){ // 遍歷每個(gè)產(chǎn)品
let title = element.childNodes[5].innerText; // 選擇標(biāo)題
let price = element.childNodes[7].children[0].innerText; // 選擇價(jià)格
data.push({title, price}); // 將對(duì)象放進(jìn)數(shù)組 data
}
return data; // 返回?cái)?shù)組 data
});
browser.close();
return result; // 返回?cái)?shù)據(jù)
};
scrape().then((value) => {
console.log(value); // 成功!
});
結(jié)束語(yǔ):
感謝您的閱讀!
英文原文地址:https://codeburst.io/a-guide-to-automating-scraping-the-web-with-javascript-chrome-puppeteer-node-js-b18efb9e9921
更多編程相關(guān)知識(shí),請(qǐng)?jiān)L問(wèn):編程入門??!
更多關(guān)于云服務(wù)器,域名注冊(cè),虛擬主機(jī)的問(wèn)題,請(qǐng)?jiān)L問(wèn)西部數(shù)碼官網(wǎng):m.ps-sw.cn