最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬蟲神器Pyppeteer入門及使用

 更新時間:2019年07月13日 09:16:37   作者:千鋒Python唐唐君  
這篇文章主要介紹了python爬蟲神器Pyppeteer入門及使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

提起selenium想必大家都不陌生,作為一款知名的Web自動化測試框架,selenium支持多款主流瀏覽器,提供了功能豐富的API接口,經(jīng)常被我們用作爬蟲工具來使用。但是selenium的缺點也很明顯,比如速度太慢、對版本配置要求嚴(yán)苛,最麻煩是經(jīng)常要更新對應(yīng)的驅(qū)動。

今天就給大家介紹另一款web自動化測試工具Pyppeteer,雖然支持的瀏覽器比較單一,但在安裝配置的便利性和運行效率方面都要遠(yuǎn)勝selenium。

01.Pyppeteer簡介

介紹Pyppeteer之前先說一下Puppeteer,Puppeteer是谷歌出品的一款基于Node.js開發(fā)的一款工具,主要是用來操縱Chrome瀏覽器的 API,通過Javascript代碼來操縱Chrome瀏覽器,完成數(shù)據(jù)爬取、Web程序自動測試等任務(wù)。

Pyppeteer其實是Puppeteer的Python版本,下面簡單介紹下Pyppeteer的兩大特點,chromium瀏覽器和asyncio框架:

1).chromium

Chromium是一款獨立的瀏覽器,是Google為發(fā)展自家的瀏覽器Google Chrome而開啟的計劃,相當(dāng)于Chrome的實驗版,Chromium的穩(wěn)定性不如Chrome但是功能更加豐富,而且更新速度很快,通常每隔數(shù)小時就有新的開發(fā)版本發(fā)布。

Pyppeteer的web自動化是基于chromium來實現(xiàn)的,由于chromium中某些特性的關(guān)系,Pyppeteer的安裝配置非常簡單,關(guān)于這一點稍后我們會詳細(xì)介紹。

2).asyncio

asyncio是Python的一個異步協(xié)程庫,自3.4版本引入的標(biāo)準(zhǔn)庫,直接內(nèi)置了對異步IO的支持,號稱是Python最有野心的庫,官網(wǎng)上有非常詳細(xì)的介紹:


02.安裝與使用

1).極簡安裝

使用pip install pyppeteer命令就能完成pyppeteer庫的安裝,至于chromium瀏覽器,只需要一條pyppeteer-install命令就會自動下載對應(yīng)的最新版本chromium瀏覽器到pyppeteer的默認(rèn)位置。

如果不運行pyppeteer-install命令,在第一次使用pyppeteer的時候也會自動下載并安裝chromium瀏覽器,效果是一樣的。總的來說,pyppeteer比起selenium省去了driver配置的環(huán)節(jié)。

當(dāng)然,出于某種原因,也可能會出現(xiàn)chromium自動安裝無法順利完成的情況,這時可以考慮手動安裝:首先,從下列網(wǎng)址中找到自己系統(tǒng)的對應(yīng)版本,下載chromium壓縮包;

然后,將壓縮包放到pyppeteer的指定目錄下解壓縮,windows系統(tǒng)的默認(rèn)目錄。其他系統(tǒng)下的默認(rèn)目錄可以參照下面這幅圖:


2).使用

安裝完后就來試試效果。一起來看下面這段代碼,在main函數(shù)中,先是建立一個瀏覽器對象,然后打開新的標(biāo)簽頁,訪問百度主頁,對當(dāng)前頁面截圖并保存為“example.png”,最后關(guān)閉瀏覽器。前文也提到過,pyppeteer是基于asyncio構(gòu)建的,所以在使用的時候需要用到async/await結(jié)構(gòu)。

運行上面這段代碼會發(fā)現(xiàn)并沒有瀏覽器彈出運行,這是因為Pyppeteer默認(rèn)使用的是無頭瀏覽器,如果想要瀏覽器顯示,需要在launch函數(shù)中設(shè)置參數(shù)“headless =False”,程序運行結(jié)束后在同一目錄下會出現(xiàn)截取到的網(wǎng)頁圖片:


03.實戰(zhàn)異步基金爬取

我們前面一直在說Pyppeteer是一款非常高效的web自動化測試工具,其本質(zhì)原因是由于Pyppeteer是基于asyncio構(gòu)建的,它的所有屬性和方法幾乎都是coroutine對象,因此在構(gòu)建異步程序的時候非常方便,天生就支持異步運行。

下面就來對比順序執(zhí)行和異步運行的效率究竟如何:

1).基金爬取

我們把天天基金網(wǎng)中的開放式基金凈值數(shù)據(jù)爬取作為本次的實驗任務(wù),下面這張圖是一支基金的歷史凈值數(shù)據(jù),這個頁面是js加載的,沒辦法通過requests直接獲取內(nèi)容信息,因此可以考慮使用模擬瀏覽器操作的方式進(jìn)行數(shù)據(jù)抓取。(事實上基金凈值數(shù)據(jù)的獲取是有API接口的,本次任務(wù)只是為了演示,不具備實用價值)


為了使效果更加明顯,我們此次爬取基金列表頁(下圖)前50支基金的近20個交易日的凈值數(shù)據(jù)。


2).順序執(zhí)行

程序構(gòu)建的基本思路是新建一個browser瀏覽器和一個頁面page,依次訪問每個基金的凈值數(shù)據(jù)頁面并爬取數(shù)據(jù)。核心代碼如下:


代碼中的get_data()函數(shù)用于凈值數(shù)據(jù)頁面解析和數(shù)據(jù)的轉(zhuǎn)化,get_all_codes()函數(shù)用于獲取全部開放式基金的基金代碼(共6000余個)。雖然程序也使用了async/await的結(jié)構(gòu),但是對多個基金的凈值數(shù)據(jù)獲取都是在callurl_and_getdata()函數(shù)中順序執(zhí)行的,之所以這樣寫是因為pyppeteer中的方法都是coroutine對象,必須以這種形式構(gòu)建程序。

為了排除打開瀏覽器的耗時干擾,我們僅統(tǒng)計訪問頁面和數(shù)據(jù)抓取的用時,其結(jié)果為:12.08秒。

3).異步執(zhí)行

下面我們把程序改造一下,功能函數(shù)都不變,主要是把對fundlist的循環(huán)運行改裝成async的task對象。核心代碼如下:


耗時的統(tǒng)計區(qū)間仍然從瀏覽器打開后開始計算,其運行用時為:2.18秒,相比順序執(zhí)行要快了6倍??梢韵胂?,如果需要爬取的工作量比較大,順序執(zhí)行需要10個小時的話,異步執(zhí)行可能只需要不到2個小時,優(yōu)化效果可謂非常明顯了。

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

相關(guān)文章

  • Python socket連接中的粘包、精確傳輸問題實例分析

    Python socket連接中的粘包、精確傳輸問題實例分析

    這篇文章主要介紹了Python socket連接中的粘包、精確傳輸問題,結(jié)合實例形式分析了Python socket連接中的粘包、精確傳輸相關(guān)問題原因、解決方案與操作注意事項,需要的朋友可以參考下
    2020-03-03
  • Python創(chuàng)建臨時文件和文件夾

    Python創(chuàng)建臨時文件和文件夾

    這篇文章主要介紹了Python如何創(chuàng)建臨時文件和文件夾,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • 用python實現(xiàn)批量重命名文件的代碼

    用python實現(xiàn)批量重命名文件的代碼

    任務(wù)很簡單,某個目錄下面有幾千個文件,某些文件沒有后綴名,現(xiàn)在的任務(wù)就是將所有的沒有后綴名的文件加上后綴名,python有現(xiàn)成的函數(shù)可以實現(xiàn),但是在實現(xiàn)過程中遇到幾個問題,分享一下解決方法
    2012-05-05
  • Python線程協(xié)作threading.Condition實現(xiàn)過程解析

    Python線程協(xié)作threading.Condition實現(xiàn)過程解析

    這篇文章主要介紹了Python線程協(xié)作threading.Condition實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 使用國內(nèi)鏡像源優(yōu)化pip install下載的方法步驟

    使用國內(nèi)鏡像源優(yōu)化pip install下載的方法步驟

    在Python開發(fā)中,pip 是一個不可或缺的工具,用于安裝和管理Python包,然而,由于默認(rèn)的PyPI服務(wù)器位于國外,國內(nèi)用戶在安裝依賴時可能會遇到下載速度慢、連接不穩(wěn)定等問題,所以本文將詳細(xì)介紹如何使用國內(nèi)鏡像源來加速pip install -r requirements.txt的過程
    2025-03-03
  • arcgis使用Python腳本進(jìn)行批量截圖功能實現(xiàn)

    arcgis使用Python腳本進(jìn)行批量截圖功能實現(xiàn)

    最近公司數(shù)據(jù)部那邊有個需求,需要結(jié)合矢量數(shù)據(jù)和影像數(shù)據(jù),進(jìn)行批量截圖,并且截圖中只能有一個圖斑,還要添加上相應(yīng)的水印,這篇文章主要介紹了arcgis使用Python腳本進(jìn)行批量截圖,需要的朋友可以參考下
    2023-01-01
  • APPium+Python編寫真機(jī)移動端自動化腳本的項目實踐

    APPium+Python編寫真機(jī)移動端自動化腳本的項目實踐

    本文主要介紹了APPium+Python編寫真機(jī)移動端自動化腳本的項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Django 對IP訪問頻率進(jìn)行限制的例子

    Django 對IP訪問頻率進(jìn)行限制的例子

    今天小編就為大家分享一篇Django 對IP訪問頻率進(jìn)行限制的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python之列表推導(dǎo)式最全匯總(上篇)

    Python之列表推導(dǎo)式最全匯總(上篇)

    這篇文章主要介紹了Python之列表推導(dǎo)式最全匯總(上篇),本文章內(nèi)容詳細(xì),通過案例可以更好的理解列表推導(dǎo)式的相關(guān)知識,本模塊分為了三部分,本次為上篇,需要的朋友可以參考下
    2023-01-01
  • PyQt與pycharm的結(jié)合使用教程

    PyQt與pycharm的結(jié)合使用教程

    這篇文章主要介紹了PyQt的使用與pycharm的結(jié)合,主要包括環(huán)境安裝,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05

最新評論

安平县| 沙田区| 中牟县| 福州市| 刚察县| 哈尔滨市| 西林县| 永善县| 澜沧| 梅河口市| 原阳县| 屏山县| 水富县| 昭平县| 扶绥县| 方城县| 齐河县| 舒兰市| 阿勒泰市| 铜陵市| 海盐县| 化德县| 玛纳斯县| 朔州市| 珠海市| 北宁市| 隆子县| 上高县| 麻阳| 道孚县| 永济市| 昭觉县| 静海县| 双牌县| 大名县| 九龙坡区| 大连市| 沂水县| 定结县| 锡林浩特市| 汤原县|