具體使用請參看 Puppeteer官網
爬蟲是一個模擬人類請求網站行爲的程序。不少爬蟲程序是經過請求http獲取數據,用puppeteer作爬蟲是經過DevTool協議控制Chrome或Chromium來抓取頁面信息node
兩種模式git
1.完整模式(自動下載最新版的Chrome)github
npm i puppeteer ... const puppeteer = require('puppeteer');
2.簡潔模式(手動指定Chrome路徑)chrome
npm i puppeteer-core ... const puppeteer = require('puppeteer-core'); puppeteer.launch({ executablePath:Chrome.exe // 指定Chrome或Chromium路徑 })
直接上代碼npm
const puppeteer = require('puppeteer-core'); const launchConfig = { headless: false, executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe', slowMo: 1000, defaultViewport: { width: 1600, height: 900, } } puppeteer.launch(launchConfig).then(async browser => { const page = await browser.newPage(); await page.goto('https://movie.douban.com/cinema/nowplaying/beijing/'); const result = await page.evaluate(() => { const items = document.querySelectorAll('#nowplaying > div.mod-bd > ul >li'); const links = []; if (items.length >= 1) { items.forEach((item) => { const data = Array.from(item.attributes); const link = {}; data.forEach((v) => { link[v.nodeName] = v.value; }); const a = item.querySelector('.poster > a'); const img = a.querySelector('img'); link.href = a.getAttribute('href'); link.src = img.getAttribute('src'); links.push({ ...link, }); }); } return links; }); console.log('result', result) await browser.close(); });
爲何在page.evaluate()函數中就能夠使用原生DOM操做呢?api
Puppeteer 是一個 Node 庫,它提供了一個高級 API 來經過 DevTools 協議控制 Chromium 或 Chrome。
page.evaluate()至關於經過DevTools協議調用了瀏覽器的控制檯,將它的回調所有拿到了控制檯中執行,在瀏覽器的控制檯中咱們是能夠用原生操做來控制頁面的。
咱們把上文page.evaluate()中的回調拿到控制檯中執行,拿到的數據和上文的如出一轍
瀏覽器