摘要:首先介紹是一個庫,他提供了一組用來操縱的默認(rèn)也就是無的,也可以配置為有有點類似于,但是官方團(tuán)隊進(jìn)行維護(hù)的,前景更好。使用,相當(dāng)于同時具有和的能力,應(yīng)用場景會非常多。
首先介紹Puppeteer
Puppeteer是一個node庫,他提供了一組用來操縱Chrome的API(默認(rèn)headless也就是無UI的chrome,也可以配置為有UI)
有點類似于PhantomJS,但Puppeteer是Chrome官方團(tuán)隊進(jìn)行維護(hù)的,前景更好。
使用Puppeteer,相當(dāng)于同時具有Linux和Chrome的能力,應(yīng)用場景會非常多。就爬蟲領(lǐng)域來說,遠(yuǎn)比一般的爬蟲工具功能更豐富,性能分析、自動化測試也不在話下,今天先探討爬蟲相關(guān)
Puppeteer官方文檔請猛戳這里
Puppeteer 核心功能利用網(wǎng)頁生成PDF、圖片
爬取SPA應(yīng)用,并生成預(yù)渲染內(nèi)容(即“SSR” 服務(wù)端渲染)
可以從網(wǎng)站抓取內(nèi)容
自動化表單提交、UI測試、鍵盤輸入等
幫你創(chuàng)建一個最新的自動化測試環(huán)境(chrome),可以直接在此運行測試用例
捕獲站點的時間線,以便追蹤你的網(wǎng)站,幫助分析網(wǎng)站性能問題
OK,基本熟悉之后,接下來進(jìn)行爬蟲教學(xué):使用puppeteer.launch()運行puppeteer,他會return一個promise,使用then方法獲取browser實例,Browser API猛擊這里
拿到browser實例后,通過browser.newPage()方法,可以得到一個page實例, 猛戳 Page API
使用page.goto()方法,跳轉(zhuǎn)至ES6標(biāo)準(zhǔn)入門
在page.evaluate()方法中注冊回調(diào)函數(shù),并分析dom結(jié)構(gòu),從下圖可以進(jìn)行詳細(xì)分析,并通過document.querySelectorAll("ol li a")拿到文章的所有鏈接
拿到所有鏈接之后,依次爬取各個頁面(也可以promise all同時抓取多個頁面),使用page.pdf()方法打印當(dāng)前頁面
核心代碼如下
puppeteer.launch().then(async browser => { let page = await browser.newPage(); await page.goto("http://es6.ruanyifeng.com/#README"); await timeout(2000); let aTags = await page.evaluate(() => { let as = [...document.querySelectorAll("ol li a")]; return as.map((a) =>{ return { href: a.href.trim(), name: a.text } }); }); await page.pdf({path: `./es6-pdf/${aTags[0].name}.pdf`}); page.close() // 這里也可以使用promise all,但cpu可能吃緊,謹(jǐn)慎操作 for (var i = 1; i < aTags.length; i++) { page = await browser.newPage() var a = aTags[i]; await page.goto(a.href); await timeout(2000); await page.pdf({path: `./es6-pdf/${a.name}.pdf`}); page.close(); } browser.close(); });完整代碼訪問 Github
https://github.com/zhentaoo/p...
效果如下,這里簡述幾個需要注意的問題:如果在page go之后馬上進(jìn)行pdf抓取,此時頁面還未完成渲染,只能抓到loading圖(如下),所以用timeout做了簡單點處理
最終爬取效果如下,PDF的尺寸、預(yù)覽效果、首頁重復(fù)就不做過多整理, 預(yù)覽效果如下,如果想要自己處理,可以設(shè)置一下chrome尺寸,打印頁數(shù)
最后聲明,生成的PDF很粗糙,應(yīng)該不會對阮老師產(chǎn)生什么影響,如有問題可以第一時間聯(lián)系我....
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87335.html
摘要:抓取并生成預(yù)先呈現(xiàn)的內(nèi)容即。自動表單提交,測試,鍵盤輸入等。創(chuàng)建一個最新的自動化測試環(huán)境。使用最新的的和瀏覽器功能,直接在最新版本的瀏覽器中運行測試。捕獲您網(wǎng)站的時間線跟蹤,以幫助診斷性能問題。 木偶 Puppeteer 更友好的 Headless Chrome Node API木偶也是有心的 (=?ω?=) showImg(https://segmentfault.com/img/b...
摘要:上面只爬取了京東首頁的圖片內(nèi)容,假設(shè)我的需求進(jìn)一步擴(kuò)大,需要爬取京東首頁中的所有標(biāo)簽對應(yīng)的跳轉(zhuǎn)網(wǎng)頁中的所有的文字內(nèi)容,最后放到一個數(shù)組中。 showImg(https://segmentfault.com/img/bVbtVeV?w=3840&h=2160); 本文適合無論是否有爬蟲以及Node.js基礎(chǔ)的朋友觀看~ 需求: 使用Node.js爬取網(wǎng)頁資源,開箱即用的配置 將爬取到的...
摘要:上面只爬取了京東首頁的圖片內(nèi)容,假設(shè)我的需求進(jìn)一步擴(kuò)大,需要爬取京東首頁中的所有標(biāo)簽對應(yīng)的跳轉(zhuǎn)網(wǎng)頁中的所有的文字內(nèi)容,最后放到一個數(shù)組中。 showImg(https://segmentfault.com/img/bVbtVeV?w=3840&h=2160); 本文適合無論是否有爬蟲以及Node.js基礎(chǔ)的朋友觀看~ 需求: 使用Node.js爬取網(wǎng)頁資源,開箱即用的配置 將爬取到的...
摘要:上面只爬取了京東首頁的圖片內(nèi)容,假設(shè)我的需求進(jìn)一步擴(kuò)大,需要爬取京東首頁中的所有標(biāo)簽對應(yīng)的跳轉(zhuǎn)網(wǎng)頁中的所有的文字內(nèi)容,最后放到一個數(shù)組中。 showImg(https://segmentfault.com/img/bVbtVeV?w=3840&h=2160); 本文適合無論是否有爬蟲以及Node.js基礎(chǔ)的朋友觀看~ 需求: 使用Node.js爬取網(wǎng)頁資源,開箱即用的配置 將爬取到的...
閱讀 3705·2021-08-10 09:42
閱讀 597·2019-08-30 15:55
閱讀 899·2019-08-30 15:54
閱讀 3119·2019-08-30 13:45
閱讀 565·2019-08-29 16:23
閱讀 1999·2019-08-29 16:23
閱讀 993·2019-08-29 15:18
閱讀 2269·2019-08-29 12:57