您好,登錄后才能下訂單哦!
引言
Selenium 在被使用的時候有個麻煩事,就是環境的相關配置,得安裝好相關瀏覽器,比如 Chrome、Firefox 等等,然后還要到官方網站去下載對應的驅動,最重要的還需要安裝對應的 Python Selenium 庫,確實是不是很方便,另外如果要做大規模部署的話,環境配置的一些問題也是個頭疼的事情。那么本節就介紹另一個類似的替代品,叫做 Pyppeteer。
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 由不同深度的藍色構成。
Pyppeteer 就是依賴于 Chromium 這個瀏覽器來運行的。那么有了 Pyppeteer 之后,我們就可以免去那些繁瑣的環境配置等問題。如果第一次運行的時候,Chromium 瀏覽器沒有安裝,那么程序會幫我們自動安裝和配置,就免去了繁瑣的環境配置等工作。另外 Pyppeteer 是基于 Python 的新特性 async 實現的,所以它的一些執行也支持異步操作,效率相對于 Selenium 來說也提高了。
環境安裝
由于 Pyppeteer 采用了 Python 的 async 機制,所以其運行要求的 Python 版本為 3.5 及以上
pip install pyppeteer
快速上手
- 爬取http://quotes.toscrape.com/js/ 全部頁面數據
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())
結合協程
from pyppeteer import launch import asyncio from lxml import etree # 實例化瀏覽器對象(谷歌測試版) async def main(): bro = await launch() # 新建一個空白頁 page = bro.newPage() page.goto('http://quotes.toscrape.com/js/') # 獲取page當前顯示頁面的源碼數據 page_text = await page.content() return page_text def parse(task): page_text = task.result() tree = etree.HTML(page_text) div_list = tree.xpath('//div[@class="quote"]') for div in div_list: content = div.xpath('./span[1]/text()') print(content) c = main() task = asyncio.ensure_future(c) task.add_done_callback(parse) loop = asyncio.get_event_loop() loop.run_until_complete(c)
解釋:
launch 方法會新建一個 Browser 對象,然后賦值給 browser,然后調用 newPage 方法相當于瀏覽器中新建了一個選項卡,同時新建了一個 Page 對象。然后 Page 對象調用了 goto 方法就相當于在瀏覽器中輸入了這個 URL,瀏覽器跳轉到了對應的頁面進行加載,加載完成之后再調用 content 方法,返回當前瀏覽器頁面的源代碼。
然后進一步地,我們用 pyquery 進行同樣地解析,就可以得到 JavaScript 渲染的結果了。在這個過程中,我們沒有配置 Chrome 瀏覽器,沒有配置瀏覽器驅動,免去了一些繁瑣的步驟,同樣達到了 Selenium 的效果,還實現了異步抓取。
詳細用法
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。