亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python爬蟲(chóng)神器Pyppeteer入門(mén)及使用

系統(tǒng) 2100 0

前言

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

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

01.Pyppeteer簡(jiǎn)介

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

Pyppeteer其實(shí)是Puppeteer的Python版本,下面簡(jiǎn)單介紹下Pyppeteer的兩大特點(diǎn),chromium瀏覽器和asyncio框架:

1).chromium

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

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

2).asyncio

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

python爬蟲(chóng)神器Pyppeteer入門(mén)及使用_第1張圖片

02.安裝與使用

1).極簡(jiǎn)安裝

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

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

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

  • 'linux': 'https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/575458/chrome-linux.zip'
  • 'mac': 'https://storage.googleapis.com/chromium-browser-snapshots/Mac/575458/chrome-mac.zip'
  • 'win32': 'https://storage.googleapis.com/chromium-browser-snapshots/Win/575458/chrome-win32.zip'
  • 'win64': 'https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip'

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

python爬蟲(chóng)神器Pyppeteer入門(mén)及使用_第2張圖片

2).使用

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

python爬蟲(chóng)神器Pyppeteer入門(mén)及使用_第3張圖片

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

python爬蟲(chóng)神器Pyppeteer入門(mén)及使用_第4張圖片

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

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

下面就來(lái)對(duì)比順序執(zhí)行和異步運(yùn)行的效率究竟如何:

1).基金爬取

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

python爬蟲(chóng)神器Pyppeteer入門(mén)及使用_第5張圖片

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

python爬蟲(chóng)神器Pyppeteer入門(mén)及使用_第6張圖片

2).順序執(zhí)行

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

python爬蟲(chóng)神器Pyppeteer入門(mén)及使用_第7張圖片

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

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

3).異步執(zhí)行

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

python爬蟲(chóng)神器Pyppeteer入門(mén)及使用_第8張圖片

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

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美干干| 国产一区私人高清影院 | 最近中文字幕免费版在线3 最近中文字幕无吗高清视频 | 美女视频很黄很黄又免费的 | 亚洲精品久久 | 四虎影视在线免费观看 | 国产精品久久久久毛片真精品 | 久久99精品一久久久久久 | 婷婷亚洲综合五月天在线 | 日本一区二区在线播放 | 99久久99热精品免费观看国产 | 老司机久久精品 | 91九色国产 | 欧美污视频网站 | 特黄日韩免费一区二区三区 | 成人深夜视频在线观看 | 亚洲第成色999久久网站 | 精品国产免费福利片 | 免费看欧美一级a毛片 | 久久天天躁狠狠躁夜夜爽 | 日韩国产欧美成人一区二区影院 | 日本a视频 | 午夜一级毛片免费视频 | 久久午夜宅男免费网站 | 天天躁日日2018躁狠狠躁 | 国产精品嘿咻嘿咻在线播放 | 欧美一级毛片片aa视频 | 97视频精品全国在线观看 | 亚洲视频在线观看不卡 | f性欧美 | 亚洲a毛片| 国产夫妻久久 | 天天色综合2| 福利视频在线播放 | 欧美第一精品 | 毛片免费大全 | 天天弄天天干 | 午夜一级影院 | 亚洲精国产一区二区三区 | 免费观看国产一区二区三区 | 精品一久久香蕉国产线看观看下 |