欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬蟲 Pyppeteer使用方法解析

 更新時間:2019年09月28日 08:52:55   作者:陪伴is最長情的告白  
這篇文章主要介紹了python爬蟲 Pyppeteer使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

引言

Selenium 在被使用的時候有個麻煩事,就是環(huán)境的相關(guān)配置,得安裝好相關(guān)瀏覽器,比如 Chrome、Firefox 等等,然后還要到官方網(wǎng)站去下載對應(yīng)的驅(qū)動,最重要的還需要安裝對應(yīng)的 Python Selenium 庫,確實(shí)是不是很方便,另外如果要做大規(guī)模部署的話,環(huán)境配置的一些問題也是個頭疼的事情。那么本節(jié)就介紹另一個類似的替代品,叫做 Pyppeteer。

Pyppeteer簡介

注意,本節(jié)講解的模塊叫做 Pyppeteer,不是 Puppeteer。Puppeteer 是 Google 基于 Node.js 開發(fā)的一個工具,有了它我們可以通過 JavaScript 來控制 Chrome 瀏覽器的一些操作,當(dāng)然也可以用作網(wǎng)絡(luò)爬蟲上,其 API 極其完善,功能非常強(qiáng)大。 而 Pyppeteer 又是什么呢?它實(shí)際上是 Puppeteer 的 Python 版本的實(shí)現(xiàn),但他不是 Google 開發(fā)的,是一位來自于日本的工程師依據(jù) Puppeteer 的一些功能開發(fā)出來的非官方版本。

在 Pyppetter 中,實(shí)際上它背后也是有一個類似 Chrome 瀏覽器的 Chromium 瀏覽器在執(zhí)行一些動作進(jìn)行網(wǎng)頁渲染,首先說下 Chrome 瀏覽器和 Chromium 瀏覽器的淵源。

Chromium 是谷歌為了研發(fā) Chrome 而啟動的項(xiàng)目,是完全開源的。二者基于相同的源代碼構(gòu)建,Chrome 所有的新功能都會先在 Chromium 上實(shí)現(xiàn),待驗(yàn)證穩(wěn)定后才會移植,因此 Chromium 的版本更新頻率更高,也會包含很多新的功能,但作為一款獨(dú)立的瀏覽器,Chromium 的用戶群體要小眾得多。兩款瀏覽器“同根同源”,它們有著同樣的 Logo,但配色不同,Chrome 由藍(lán)紅綠黃四種顏色組成,而 Chromium 由不同深度的藍(lán)色構(gòu)成。

Pyppeteer 就是依賴于 Chromium 這個瀏覽器來運(yùn)行的。那么有了 Pyppeteer 之后,我們就可以免去那些繁瑣的環(huán)境配置等問題。如果第一次運(yùn)行的時候,Chromium 瀏覽器沒有安裝,那么程序會幫我們自動安裝和配置,就免去了繁瑣的環(huán)境配置等工作。另外 Pyppeteer 是基于 Python 的新特性 async 實(shí)現(xiàn)的,所以它的一些執(zhí)行也支持異步操作,效率相對于 Selenium 來說也提高了。

環(huán)境安裝

由于 Pyppeteer 采用了 Python 的 async 機(jī)制,所以其運(yùn)行要求的 Python 版本為 3.5 及以上

pip install pyppeteer

快速上手

- 爬取http://quotes.toscrape.com/js/ 全部頁面數(shù)據(jù)

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())

結(jié)合協(xié)程

from pyppeteer import launch
import asyncio
from lxml import etree

# 實(shí)例化瀏覽器對象(谷歌測試版)
async def main():
  bro = await launch()
  # 新建一個空白頁
  page = bro.newPage()
  page.goto('http://quotes.toscrape.com/js/')

  # 獲取page當(dāng)前顯示頁面的源碼數(shù)據(jù)
  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,然后調(diào)用 newPage 方法相當(dāng)于瀏覽器中新建了一個選項(xiàng)卡,同時新建了一個 Page 對象。然后 Page 對象調(diào)用了 goto 方法就相當(dāng)于在瀏覽器中輸入了這個 URL,瀏覽器跳轉(zhuǎn)到了對應(yīng)的頁面進(jìn)行加載,加載完成之后再調(diào)用 content 方法,返回當(dāng)前瀏覽器頁面的源代碼。

然后進(jìn)一步地,我們用 pyquery 進(jìn)行同樣地解析,就可以得到 JavaScript 渲染的結(jié)果了。在這個過程中,我們沒有配置 Chrome 瀏覽器,沒有配置瀏覽器驅(qū)動,免去了一些繁瑣的步驟,同樣達(dá)到了 Selenium 的效果,還實(shí)現(xiàn)了異步抓取。

詳細(xì)用法

  • 開啟瀏覽器
  • 調(diào)用 launch 方法即可,相關(guān)參數(shù)介紹:
    • ignoreHTTPSErrors (bool): 是否要忽略 HTTPS 的錯誤,默認(rèn)是 False。
    • headless (bool): 是否啟用 Headless 模式,即無界面模式,如果 devtools 這個參數(shù)是 True 的話,那么該參數(shù)就會被設(shè)置為 False,否則為 True,即默認(rèn)是開啟無界面模式的。
    • executablePath (str): 可執(zhí)行文件的路徑,如果指定之后就不需要使用默認(rèn)的 Chromium 了,可以指定為已有的 Chrome 或 Chromium。
    • args (List[str]): 在執(zhí)行過程中可以傳入的額外參數(shù)。
    • devtools (bool): 是否為每一個頁面自動開啟調(diào)試工具,默認(rèn)是 False。如果這個參數(shù)設(shè)置為 True,那么 headless 參數(shù)就會無效,會被強(qiáng)制設(shè)置為 False。
  • 關(guān)閉提示條:”Chrome 正受到自動測試軟件的控制”,這個提示條有點(diǎn)煩,那咋關(guān)閉呢?這時候就需要用到 args 參數(shù)了,禁用操作如下:
    • browser = await launch(headless=False, args=['--disable-infobars'])

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論