乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Google推出的爬蟲新神器:Pyppeteer,神擋殺神,佛擋殺佛!

       求知_時光 2019-05-26

      如果大家對 Python 爬蟲有所了解的話,想必你應(yīng)該聽說過 Selenium 這個庫,這實際上是一個自動化測試工具,現(xiàn)在已經(jīng)被廣泛用于網(wǎng)絡(luò)爬蟲中來應(yīng)對 JavaScript 渲染的頁面的抓取。

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

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

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

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

      總的來說,兩款瀏覽器的內(nèi)核是一樣的,實現(xiàn)方式也是一樣的,可以認為是開發(fā)版和正式版的區(qū)別,功能上基本是沒有太大區(qū)別的。

      從入門到全棧,學(xué)習(xí)過程中有不懂的可以加入我的python零基礎(chǔ)系統(tǒng)學(xué)習(xí)交流秋秋qun:784758,214,與你分享Python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)Python,和學(xué)習(xí)什么內(nèi)容。相關(guān)學(xué)習(xí)視頻資料、開發(fā)工具都有分享

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

      那么下面就讓我們來一起了解下 Pyppeteer 的相關(guān)用法吧。

      安裝

      首先就是安裝問題了,由于 Pyppeteer 采用了 Python 的 async 機制,所以其運行要求的 Python 版本為 3.5 及以上。

      安裝方式非常簡單:

      pip3 install pyppeteer

      好了,安裝完成之后我們命令行下測試下:

      >>> import pyppeteer

      如果沒有報錯,那么就證明安裝成功了。

      快速上手

      接下來我們測試下基本的頁面渲染操作,這里我們選用的網(wǎng)址為:http://quotes./js/,這個頁面是 JavaScript 渲染而成的,用基本的 requests 庫請求得到的 HTML 結(jié)果里面是不包含頁面中所見的條目內(nèi)容的。

      為了證明 requests 無法完成正常的抓取,我們可以先用如下代碼來測試一下:

      import requests
      from pyquery import PyQuery as pq

      url = 'http://quotes./js/'
      response = requests.get(url)
      doc = pq(response.text)
      print('Quotes:', doc('.quote').length)

      這里首先使用 requests 來請求網(wǎng)頁內(nèi)容,然后使用 pyquery 來解析頁面中的每一個條目。觀察源碼之后我們發(fā)現(xiàn)每個條目的 class 名為 quote,所以這里選用了 .quote 這個 CSS 選擇器來選擇,最后輸出條目數(shù)量。

      運行結(jié)果:

      Quotes: 0

      結(jié)果是 0,這就證明使用 requests 是無法正常抓取到相關(guān)數(shù)據(jù)的。因為什么?因為這個頁面是 JavaScript 渲染而成的,我們所看到的內(nèi)容都是網(wǎng)頁加載后又執(zhí)行了 JavaScript 之后才呈現(xiàn)出來的,因此這些條目數(shù)據(jù)并不存在于原始 HTML 代碼中,而 requests 僅僅抓取的是原始 HTML 代碼。

      好的,所以遇到這種類型的網(wǎng)站我們應(yīng)該怎么辦呢?

      其實答案有很多:

      • 分析網(wǎng)頁源代碼數(shù)據(jù),如果數(shù)據(jù)是隱藏在 HTML 中的其他地方,以 JavaScript 變量的形式存在,直接提取就好了。

      • 分析 Ajax,很多數(shù)據(jù)可能是經(jīng)過 Ajax 請求時候獲取的,所以可以分析其接口。

      • 模擬 JavaScript 渲染過程,直接抓取渲染后的結(jié)果。

      而 Pyppeteer 和 Selenium 就是用的第三種方法,下面我們再用 Pyppeteer 來試試,如果用 Pyppeteer 實現(xiàn)如上頁面的抓取的話,代碼就可以寫為如下形式:

      import asyncio
      from pyppeteer import launch
      from pyquery import PyQuery as pq

      async def main():
      browser = await launch()
      page = await browser.newPage()
      await page.goto('http://quotes./js/')
      doc = pq(await page.content())
      print('Quotes:', doc('.quote').length)
      await browser.close()

      asyncio.get_event_loop().run_until_complete(main())

      運行結(jié)果:

      Quotes: 10

      看運行結(jié)果,這說明我們就成功匹配出來了 class 為 quote 的條目,總數(shù)為 10 條

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多