引言
Selenium 在被使用的時候有個麻煩事,就是環境的相關配置,得安裝好相關瀏覽器,好比 Chrome、Firefox 等等,而後還要到官方網站去下載對應的驅動,最重要的還須要安裝對應的 Python Selenium 庫,確實是否是很方便,另外若是要作大規模部署的話,環境配置的一些問題也是個頭疼的事情。那麼本節就介紹另外一個相似的替代品,叫作 Pyppeteer。html
Pyppeteer簡介
注意,本節講解的模塊叫作 Pyppeteer,不是 Puppeteer。Puppeteer 是 Google 基於 Node.js 開發的一個工具,有了它咱們能夠經過 JavaScript 來控制 Chrome 瀏覽器的一些操做,固然也能夠用做網絡爬蟲上,其 API 極其完善,功能很是強大。 而 Pyppeteer 又是什麼呢?它其實是 Puppeteer 的 Python 版本的實現,但他不是 Google 開發的,是一位來自於日本的工程師依據 Puppeteer 的一些功能開發出來的非官方版本。瀏覽器
在 Pyppetter 中,實際上它背後也是有一個相似 Chrome 瀏覽器的 Chromium 瀏覽器在執行一些動做進行網頁渲染,首先說下 Chrome 瀏覽器和 Chromium 瀏覽器的淵源。網絡
Chromium 是谷歌爲了研發 Chrome 而啓動的項目,是徹底開源的。兩者基於相同的源代碼構建,Chrome 全部的新功能都會先在 Chromium 上實現,待驗證穩定後纔會移植,所以 Chromium 的版本更新頻率更高,也會包含不少新的功能,但做爲一款獨立的瀏覽器,Chromium 的用戶羣體要小衆得多。兩款瀏覽器「同根同源」,它們有着一樣的 Logo,但配色不一樣,Chrome 由藍紅綠黃四種顏色組成,而 Chromium 由不一樣深度的藍色構成。
less
Pyppeteer 就是依賴於 Chromium 這個瀏覽器來運行的。那麼有了 Pyppeteer 以後,咱們就能夠免去那些繁瑣的環境配置等問題。若是第一次運行的時候,Chromium 瀏覽器沒有安裝,那麼程序會幫咱們自動安裝和配置,就免去了繁瑣的環境配置等工做。另外 Pyppeteer 是基於 Python 的新特性 async 實現的,因此它的一些執行也支持異步操做,效率相對於 Selenium 來講也提升了。異步
環境安裝
- 因爲 Pyppeteer 採用了 Python 的 async 機制,因此其運行要求的 Python 版本爲 3.5 及以上
- pip install pyppeteer
快速上手
- 爬取http://quotes.toscrape.com/js/ 所有頁面數據async
import asyncio from pyppeteer import launch from lxml import etree async def main(): browser = await launch() page = await browser.newPage() await page.goto('http://quotes.toscrape.com/js/') page_text = await page.content() tree = etree.HTML(page_text) div_list = tree.xpath('//div[@class="quote"]') print(len(div_list)) await browser.close() asyncio.get_event_loop().run_until_complete(main())