Python簡(jiǎn)單爬蟲實(shí)踐案例
學(xué)習(xí)目標(biāo)
能夠知道Web開發(fā)流程
能夠掌握FastAPI實(shí)現(xiàn)訪問多個(gè)指定網(wǎng)頁(yè)
知道通過requests模塊爬取圖片
知道通過requests模塊爬取GDP數(shù)據(jù)
能夠用pyecharts實(shí)現(xiàn)餅圖
能夠知道logging日志的使用
一、基于FastAPI之Web站點(diǎn)開發(fā)
FastAPI是一個(gè)高性能、易于使用、快速編寫API的現(xiàn)代Web框架。它基于Python3.6+的新特性(如類型標(biāo)注、異步支持、協(xié)程等),對(duì)性能和開發(fā)速度進(jìn)行了優(yōu)化,支持異步編程,可以輕松地創(chuàng)建具有高性能的API服務(wù)。
FastAPI的主要特點(diǎn)包括:
1. 快速:FastAPI的請(qǐng)求響應(yīng)速度非常快,相比其他框架甚至能快幾倍。
2. 易于使用:FastAPI的API設(shè)計(jì)類似于Flask,提供了簡(jiǎn)單易用的路由和參數(shù)解析。同時(shí),它的類型標(biāo)注功能使開發(fā)更加可靠,易于維護(hù)。
3. 異步支持:FastAPI完全支持異步編程模式,利用Python 3.6以上版本的async/await關(guān)鍵字,使得復(fù)雜的I/O操作變得非常簡(jiǎn)單。
4. 自動(dòng)生成API文檔:FastAPI基于OpenAPI標(biāo)準(zhǔn),自動(dòng)生成并提供了優(yōu)美的API文檔,無需手動(dòng)編寫文檔。
5. 安全性:FastAPI完全支持OpenID Connect 和OAuth2規(guī)范,提供安全的認(rèn)證方式,同時(shí)支持JWT和Bearer Token。
1、基于FastAPI搭建Web服務(wù)器
搭建基于FastAPI的Web服務(wù)器的具體步驟如下:
安裝FastAPI和uvicorn:
創(chuàng)建一個(gè)Python文件,例如main.py,并導(dǎo)入必要的模塊:
創(chuàng)建一個(gè)FastAPI應(yīng)用實(shí)例:
定義一個(gè)路由處理函數(shù),用于處理HTTP請(qǐng)求:
啟動(dòng)Web服務(wù)器:
在命令行中運(yùn)行Python文件,啟動(dòng)Web服務(wù)器:
訪問http://localhost:8000/,應(yīng)該能夠看到返回的JSON數(shù)據(jù){"Hello": "World"}。
以上就是使用FastAPI搭建Web服務(wù)器的基本步驟。你可以根據(jù)需要添加更多的路由處理函數(shù)和業(yè)務(wù)邏輯。 接下來我們來看一個(gè)具體的例子:
運(yùn)行結(jié)果:

2、Web服務(wù)器和瀏覽器的通訊流程
實(shí)際上Web服務(wù)器和瀏覽器的通訊流程過程并不是一次性完成的, 這里html代碼中也會(huì)有訪問服務(wù)器的代碼,比如請(qǐng)求圖片資源。 Web服務(wù)器和瀏覽器的通訊流程一般如下:
瀏覽器向Web服務(wù)器發(fā)送HTTP請(qǐng)求。
Web服務(wù)器接收到請(qǐng)求后,根據(jù)請(qǐng)求的內(nèi)容生成相應(yīng)的HTTP響應(yīng)。
Web服務(wù)器將HTTP響應(yīng)返回給瀏覽器。
瀏覽器接收到HTTP響應(yīng)后,解析響應(yīng)內(nèi)容并渲染頁(yè)面。
如果頁(yè)面中包含其他資源(如圖片、CSS、JavaScript等),瀏覽器會(huì)再次向Web服務(wù)器發(fā)送請(qǐng)求獲取這些資源,并重復(fù)上述流程。
在這個(gè)過程中,HTTP協(xié)議是Web服務(wù)器和瀏覽器通信的基礎(chǔ)。 我們來看一個(gè)具體的例子:

那像0.jpg、1.jpg、2.jpg、3.jpg、4.jpg、5.jpg、6.jpg這些訪問來自哪里呢 ?
答:它們來自index.html

3、瀏覽器訪問Web服務(wù)器的通訊流程

瀏覽器訪問Web服務(wù)器的通訊流程:
瀏覽器 (127.0.0.1/index.html) ==> 向Web服務(wù)器請(qǐng)求index.html
Web服務(wù)器 (返回index.html) ==> 瀏覽器
瀏覽器解析index.html發(fā)現(xiàn)需要0.jpg ==>發(fā)送請(qǐng)求給 Web服務(wù)器請(qǐng)求0.jpg
Web服務(wù)器 收到請(qǐng)求返回0.jpg ==> 瀏覽器 接受0.jpg
通訊過程能夠成功的前提: 瀏覽器發(fā)送的0.jpg請(qǐng)求, Web服務(wù)器可以做出響應(yīng), 也就是代碼如下
4、加載圖片資源代碼
這段代碼是一個(gè)使用FastAPI框架創(chuàng)建的簡(jiǎn)單Web服務(wù)器。下面是代碼的解釋:
首先,導(dǎo)入所需的模塊:
FastAPI模塊用于創(chuàng)建Web應(yīng)用程序。
Response模塊用于構(gòu)建HTTP響應(yīng)。
uvicorn模塊用于運(yùn)行服務(wù)器。
創(chuàng)建FastAPI的實(shí)例對(duì)象 app。
定義了多個(gè)路由處理函數(shù),每個(gè)函數(shù)對(duì)應(yīng)一個(gè)URL路徑。每一個(gè)函數(shù)中,它們會(huì)打開并讀取指定的圖片文件或HTML文件。
當(dāng)訪問 /images/0.jpg 路徑時(shí),執(zhí)行 func_01() 函數(shù)。該函數(shù)打開名為 0.jpg 的圖片文件,讀取文件的內(nèi)容,并返回一個(gè)含有圖片內(nèi)容的HTTP響應(yīng)。
同樣的方式定義了 /images/1.jpg 至 /images/6.jpg 路徑對(duì)應(yīng)的函數(shù)。
當(dāng)訪問 /gdp.html 路徑時(shí),執(zhí)行 func_08() 函數(shù)。該函數(shù)打開名為 gdp.html 的HTML文件,讀取文件的內(nèi)容,并返回一個(gè)含有HTML內(nèi)容的HTTP響應(yīng)。
當(dāng)訪問 /index.html 路徑時(shí),執(zhí)行 main() 函數(shù)。該函數(shù)打開名為 index.html 的HTML文件,讀取文件的內(nèi)容,并返回一個(gè)含有HTML內(nèi)容的HTTP響應(yīng)。
最后,使用 uvicorn.run() 方法運(yùn)行服務(wù)器,監(jiān)聽I(yíng)P地址 127.0.0.1 上的端口號(hào) 8000。
5、小結(jié)
瀏覽器訪問Web服務(wù)器的通訊流程:
瀏覽器 (127.0.0.1/index.html) ==> 向Web服務(wù)器請(qǐng)求index.html
Web服務(wù)器 (返回index.html) ==> 瀏覽器
瀏覽器解析index.html發(fā)現(xiàn)需要0.jpg ==>發(fā)送請(qǐng)求給 Web服務(wù)器請(qǐng)求0.jpg
Web服務(wù)器 收到請(qǐng)求返回0.jpg ==> 瀏覽器 接受0.jpg
二、基于Web請(qǐng)求的FastAPI通用配置
1、目前Web服務(wù)器存在問題
這段代碼是一個(gè)使用Python的FastAPI框架編寫的Web應(yīng)用程序。它創(chuàng)建了三個(gè)路由(或稱為端點(diǎn)),分別用于返回不同的圖片文件。 通過@app.get裝飾器,每個(gè)函數(shù)定義了一個(gè)路由,指定了路由的URL路徑,以及當(dāng)請(qǐng)求該路徑時(shí)執(zhí)行的函數(shù)。
這個(gè)函數(shù)定義了一個(gè)路由/images/0.jpg,當(dāng)訪問此路徑時(shí)會(huì)執(zhí)行func_01函數(shù)。該函數(shù)打開并讀取名為source/images/0.jpg的文件,并將讀取的數(shù)據(jù)賦值給變量data。然后,函數(shù)返回一個(gè)Response對(duì)象,其中包含data作為內(nèi)容,并指定媒體類型為jpg。
類似地,func_02函數(shù)定義了另一個(gè)路由/images/1.jpg,用于返回名為source/images/1.jpg的文件。 最后,func_03函數(shù)定義了一個(gè)路由/images/2.jpg,用于返回名為source/images/2.jpg的文件。 這些函數(shù)使用了with open語(yǔ)句來打開文件并讀取其內(nèi)容。打開文件時(shí)使用了"rb"模式(以二進(jìn)制模式打開文件),表示這是一個(gè)二進(jìn)制文件(比如圖片),而不是文本文件。
這些函數(shù)返回的Response對(duì)象指定了響應(yīng)的內(nèi)容和媒體類型,以便客戶端能夠正確解析和處理返回的圖像數(shù)據(jù)。
對(duì)以上代碼觀察,會(huì)發(fā)現(xiàn)每一張圖片0.jpg、1.jpg、2.jpg就需要一個(gè)函數(shù)對(duì)應(yīng), 如果我們需要1000張圖片那就需要1000個(gè)函數(shù)對(duì)應(yīng), 顯然這樣做代碼的重復(fù)太多了.
2、基于Web請(qǐng)求的FastAPI通用配置
完整代碼:
這段代碼使用了Python的FastAPI框架來創(chuàng)建一個(gè)簡(jiǎn)單的Web服務(wù)器。以下是代碼的解釋:
導(dǎo)入必要的模塊:代碼首先導(dǎo)入了FastAPI框架模塊,用于創(chuàng)建Web應(yīng)用程序。然后導(dǎo)入了Response模塊,用于返回HTTP響應(yīng)報(bào)文。最后導(dǎo)入了uvicorn模塊,用于運(yùn)行Web服務(wù)器。
創(chuàng)建FastAPI應(yīng)用程序?qū)ο螅菏褂胊pp = FastAPI()創(chuàng)建了FastAPI框架的應(yīng)用程序?qū)ο蟆?/p>
定義路由和處理函數(shù):
/images/{path}路由匹配請(qǐng)求路徑為/images/0.jpg。path參數(shù)表示請(qǐng)求中的文件路徑。
get_pic函數(shù)是處理/images/{path}路由的處理函數(shù)。它從指定路徑讀取圖片文件的內(nèi)容,并將其作為二進(jìn)制數(shù)據(jù)返回給客戶端。使用Response(content=data, media_type="jpg")創(chuàng)建了一個(gè)Response對(duì)象,將圖片數(shù)據(jù)作為響應(yīng)數(shù)據(jù)返回給客戶端。
/{path}路由匹配其他所有請(qǐng)求路徑。path參數(shù)表示請(qǐng)求中的文件路徑。
get_html函數(shù)是處理/{path}路由的處理函數(shù)。它從指定路徑讀取HTML文件的內(nèi)容,并將其作為二進(jìn)制數(shù)據(jù)返回給客戶端。使用Response(content=data, media_type="text/html")創(chuàng)建了一個(gè)Response對(duì)象,將HTML數(shù)據(jù)作為響應(yīng)數(shù)據(jù)返回給客戶端。
4.運(yùn)行Web服務(wù)器:使用uvicorn.run(app, host="127.0.0.1", port=8000)運(yùn)行Web服務(wù)器,監(jiān)聽127.0.0.1:8000地址。這將啟動(dòng)一個(gè)HTTP服務(wù)器,接受客戶端請(qǐng)求,并根據(jù)定義的路由和處理函數(shù)進(jìn)行響應(yīng)。
運(yùn)行結(jié)果:

3、小結(jié)
通用配置代碼:
這段代碼是一個(gè)基于FastAPI框架的HTTP服務(wù)端代碼。該代碼中定義了一個(gè)GET請(qǐng)求處理函數(shù)get_pic,用于處理請(qǐng)求路徑為/images/{path}的請(qǐng)求。
當(dāng)接收到一個(gè)請(qǐng)求時(shí),F(xiàn)astAPI會(huì)將請(qǐng)求路徑中的{path}部分作為參數(shù)傳遞給get_pic函數(shù)。在函數(shù)內(nèi)部,該參數(shù)被聲明為path: str,表示path是一個(gè)字符串類型的數(shù)據(jù)。
函數(shù)內(nèi)部使用open()函數(shù)打開了一個(gè)文件,文件路徑為source/images/{path},其中{path}是請(qǐng)求路徑中的具體值。然后使用rb模式讀取文件內(nèi)容,并將內(nèi)容賦值給變量data。
最后,使用Response類創(chuàng)建一個(gè)響應(yīng)對(duì)象,并將文件內(nèi)容作為響應(yīng)數(shù)據(jù),數(shù)據(jù)格式為jpg。最終返回該響應(yīng)對(duì)象作為HTTP響應(yīng)。
三、Python爬蟲介紹
1、什么是爬蟲

網(wǎng)絡(luò)爬蟲:
又被稱為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò)機(jī)器人,是一種按照一定的規(guī)則,自動(dòng)地抓取網(wǎng)絡(luò)信息的程序或者腳本,另外一些不常使用的名字還有螞蟻、自動(dòng)索引、模擬程序或者蠕蟲。
通俗理解:
簡(jiǎn)單來講,爬蟲就是一個(gè)探測(cè)機(jī)器,它的基本操作就是模擬人的行為去各個(gè)網(wǎng)站溜達(dá),點(diǎn)點(diǎn)按鈕,查查數(shù)據(jù),或者把看到的信息背回來. 就像一只蟲子在一幢樓里不知疲倦地爬來爬去.
你可以簡(jiǎn)單地想象:
每個(gè)爬蟲都是你的「分身」。就像孫悟空拔了一撮汗毛,吹出一堆猴子一樣

百度:
其實(shí)就是利用了這種爬蟲技術(shù), 每天放出無數(shù)爬蟲到各個(gè)網(wǎng)站,把他們的信息抓回來,然后化好淡妝排著小隊(duì)等你來檢索。 有了這樣的特性, 對(duì)于一些自己公司數(shù)據(jù)量不足的小公司, 這個(gè)時(shí)候還想做數(shù)據(jù)分析就可以通過爬蟲獲取同行業(yè)的數(shù)據(jù)然后進(jìn)行分析, 進(jìn)而指導(dǎo)公司的策略指定。
2、爬蟲的基本步驟
基本步驟:
起始URL地址
發(fā)出請(qǐng)求獲取響應(yīng)數(shù)據(jù)
對(duì)響應(yīng)數(shù)據(jù)解析
數(shù)據(jù)入庫(kù)
3、安裝requests模塊
requests : 可以模擬瀏覽器的請(qǐng)求
官方文檔 :http://cn.python-requests.org/zh_CN/latest/
安裝 :pip install requests
快速入門(requests三步走):
4、小結(jié)
requests三步走:
5、爬取照片
☆ 查看index.html

☆ ?爬取照片的步驟
獲取index.html代碼
解析index.html代碼獲取圖片url
通過圖片url獲取圖片
☆ ?獲取index.html代碼
☆ 解析index.html代碼獲取圖片url
這段代碼是一個(gè)函數(shù),用于獲取圖片的請(qǐng)求URL。具體的流程如下:
1. 使用爬蟲向"http://127.0.0.1:8000/index.html"發(fā)送請(qǐng)求,獲取網(wǎng)頁(yè)內(nèi)容。
2. 將獲取到的網(wǎng)頁(yè)內(nèi)容進(jìn)行解碼,使用utf-8編碼格式。
3. 將解碼后的內(nèi)容按行分割,得到一個(gè)列表,每個(gè)元素是網(wǎng)頁(yè)的一行內(nèi)容。 4. 創(chuàng)建一個(gè)空列表url_list,用于存儲(chǔ)所有圖片的URL地址。
5. 遍歷每一行的內(nèi)容,使用正則表達(dá)式解析出所有的圖片URL。
6. 如果解析結(jié)果不為空,將解析出來的圖片URL添加到url_list中。
7. 最后返回url_list,即所有圖片的URL地址。
☆ 通過圖片url獲取圖片
這段代碼是一個(gè)函數(shù),用于將爬取到的圖片保存到本地。
首先,函數(shù)接受一個(gè)參數(shù)url_list,該參數(shù)是一個(gè)包含圖片url的列表。
然后,通過一個(gè)循環(huán)遍歷url_list中的每一個(gè)url。 在循環(huán)內(nèi)部,使用requests.get()方法獲取每一張圖片。這個(gè)方法發(fā)送一個(gè)HTTP GET請(qǐng)求到指定的url,并返回一個(gè)Response對(duì)象。
接下來,使用open()函數(shù)打開一個(gè)文件,文件路徑為"./source/spyder/{num}.jpg",其中num是一個(gè)遞增的數(shù)字,用于給每張圖片起一個(gè)唯一的名字。
然后,使用文件對(duì)象的write()方法將圖片內(nèi)容寫入到文件中。pic.content是獲取到的圖片內(nèi)容。
最后,關(guān)閉文件,num遞增,繼續(xù)處理下一張圖片,直到遍歷完所有的url_list中的url。 完整代碼:
詳細(xì)解釋一下代碼,這段代碼實(shí)現(xiàn)了以下功能:
導(dǎo)入了requests和re模塊。
定義了一個(gè)函數(shù)get_pic_url(),用于獲取圖片的請(qǐng)求url。
首先,通過使用requests.get()方法向"http://127.0.0.1:8000/index.html"發(fā)送請(qǐng)求,獲取網(wǎng)頁(yè)的內(nèi)容。
然后,使用content.decode("utf8")將獲取到的內(nèi)容解碼為字符串。
接著,使用split("\n")將字符串按行分割成一個(gè)列表。
創(chuàng)建一個(gè)空列表url_list,用于存儲(chǔ)圖片的url地址。
遍歷列表data中的每個(gè)元素,使用正則表達(dá)式匹配出所有的圖片url,并將其添加到url_list中。
返回url_list。
3. 定義了一個(gè)函數(shù)save_pic(url_list),用于將爬取到的圖片保存到本地。
初始化一個(gè)變量num為0,用于給照片起名字。
遍歷url_list中的每個(gè)url。
使用requests.get()方法獲取每張圖片的內(nèi)容。
使用open()方法打開一個(gè)文件,將圖片內(nèi)容寫入文件中,文件名為"./source/spyder/{num}.jpg",并遞增num。
4. 在主程序中,首先調(diào)用get_pic_url()函數(shù)獲取圖片的url列表,然后調(diào)用save_pic(url_list)函數(shù)將圖片保存到本地。
☆ 小結(jié)
爬取照片的步驟
獲取index.html代碼
解析index.html代碼獲取圖片url
通過圖片url獲取圖片
四、使用Python爬取GDP數(shù)據(jù)
1、gdp.html

通過訪問 http://127.0.0.1:8080/gdp.html 可以獲取2020年世界GDP排名. 在這里我們通過和爬取照片一樣的流程步驟獲取GDP數(shù)據(jù)。
2、zip函數(shù)的使用
zip() 函數(shù): 用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表. zip()函數(shù)是Python內(nèi)置的一個(gè)函數(shù),用于將多個(gè)可迭代對(duì)象打包成一個(gè)元組的列表。 zip()函數(shù)的語(yǔ)法如下:
其中,iterables是一個(gè)或多個(gè)可迭代對(duì)象,可以是列表、元組、字符串或其他可迭代對(duì)象。 zip()函數(shù)的工作原理是,它會(huì)從每個(gè)可迭代對(duì)象中依次取出一個(gè)元素,然后將這些元素打包成一個(gè)元組,再將這個(gè)元組添加到結(jié)果列表中。當(dāng)其中任何一個(gè)可迭代對(duì)象取盡元素時(shí),zip()函數(shù)就會(huì)停止打包。 下面是一個(gè)簡(jiǎn)單的示例,展示了zip()函數(shù)的使用:
輸出結(jié)果:
在這個(gè)示例中,zip()函數(shù)將numbers和letters兩個(gè)可迭代對(duì)象打包成了一個(gè)元組的列表。每個(gè)元組由numbers和letters中對(duì)應(yīng)位置的元素組成。 需要注意的是,如果傳入的可迭代對(duì)象的長(zhǎng)度不一致,zip()函數(shù)會(huì)以最短的可迭代對(duì)象為準(zhǔn)進(jìn)行打包。如果需要以最長(zhǎng)的可迭代對(duì)象為準(zhǔn)進(jìn)行打包,可以使用itertools.zip_longest()函數(shù)。 zip()函數(shù)在實(shí)際應(yīng)用中常用于同時(shí)迭代多個(gè)可迭代對(duì)象,特別是在需要將它們的對(duì)應(yīng)位置的元素進(jìn)行處理或組合時(shí)非常有用。 下面是另外一個(gè)例子:
3、爬取GDP數(shù)據(jù)
這段代碼的功能是爬取一個(gè)網(wǎng)頁(yè)上的國(guó)家名字和GDP數(shù)據(jù)。具體的實(shí)現(xiàn)過程如下:
導(dǎo)入requests和re模塊。
創(chuàng)建兩個(gè)空列表country_list和gdp_list,用于存儲(chǔ)爬取到的國(guó)家名字和GDP數(shù)據(jù)。
定義一個(gè)函數(shù)get_gdp_data(),用于獲取GDP數(shù)據(jù)。
在函數(shù)中,首先使用requests.get()函數(shù)獲取網(wǎng)頁(yè)的HTML數(shù)據(jù),并將其解碼為utf8格式。
將獲取到的HTML數(shù)據(jù)按行分割,得到一個(gè)列表data_list。
遍歷data_list列表,對(duì)每一行的HTML數(shù)據(jù)進(jìn)行解析。
使用re.match()函數(shù)對(duì)每一行的HTML數(shù)據(jù)進(jìn)行匹配,以獲取國(guó)家名字和GDP數(shù)據(jù)。
如果匹配成功,將國(guó)家名字存放到country_list列表中,將GDP數(shù)據(jù)存放到gdp_list列表中。
將country_list和gdp_list兩個(gè)列表融合成一個(gè)列表gdp_data。
最后,打印出gdp_data列表。
在主程序中,調(diào)用get_gdp_data()函數(shù)來執(zhí)行爬取操作。
4、小結(jié)
爬取gdp的步驟
獲取gdp.html代碼
解析gdp.html代碼獲取gdp數(shù)據(jù)
五、多任務(wù)爬蟲實(shí)現(xiàn)
1、為什么用多任務(wù)
在我們的案例中, 我們只是爬取了2個(gè)非常簡(jiǎn)單的頁(yè)面, 這兩個(gè)頁(yè)面的數(shù)據(jù)爬取并不會(huì)使用太多的時(shí)間, 所以我們也沒有太多的考慮效率問題. 但是在真正的工作環(huán)境中, 我們爬取的數(shù)據(jù)可能非常的多, 如果還是使用單任務(wù)實(shí)現(xiàn), 這時(shí)候就會(huì)讓我們爬取數(shù)據(jù)的時(shí)間很長(zhǎng), 那么顯然使用多任務(wù)可以大大提升我們爬取數(shù)據(jù)的效率
2、多任務(wù)爬取數(shù)據(jù)
實(shí)際上實(shí)現(xiàn)多任務(wù)并不難, 只需要使用我們之前講過的多任務(wù)就可以了
3、多任務(wù)代碼實(shí)現(xiàn)
4、小結(jié)
多任務(wù)
導(dǎo)入模塊
創(chuàng)建多進(jìn)程或者多線程
啟動(dòng)多任務(wù)
六、數(shù)據(jù)可視化
1、 什么是數(shù)據(jù)可視化

數(shù)據(jù)可視化:顧名思義就是讓數(shù)據(jù)看的到, 他的作用也很明顯, 讓人們不用再去閱讀枯燥無味的數(shù)據(jù), 一眼看去就可以明白數(shù)據(jù)是什么, 數(shù)據(jù)間的關(guān)系是什么, 更好的讓我們通過數(shù)據(jù)發(fā)現(xiàn)潛在的規(guī)律進(jìn)而進(jìn)行商業(yè)決策。
2、pyecharts模塊

概況 : Echarts 是個(gè)由百度開源的數(shù)據(jù)可視化,憑借著良好的交互性,精巧的圖表設(shè)計(jì),得到了眾多開發(fā)者的認(rèn)可. 而 Python 是門富有表達(dá)力的語(yǔ)言,很適合用于數(shù)據(jù)處理,當(dāng)數(shù)據(jù)分析遇上數(shù)據(jù)可視化時(shí)pyecharts 誕生了. 特性:
簡(jiǎn)潔的API設(shè)計(jì),使用如絲滑般流暢,支持鏈?zhǔn)秸{(diào)用
囊括了30+種常見圖表,應(yīng)有盡有
支持主流Notebook 環(huán)境,Jupyter Notebook 和JupyterLab
可輕松集成至Flask, Django等主流Web框架
高度靈活的配置項(xiàng),可輕松搭配出精美的圖表
詳細(xì)的文檔和示例,幫助開發(fā)者更快的上手項(xiàng)目
多達(dá)400+地圖文件以及原生的百度地圖,為地理數(shù)據(jù)可視化提供強(qiáng)有力的支持
3、通過pyecharts模塊創(chuàng)建餅狀圖
導(dǎo)入模塊
初始化餅狀圖:
Pie()函數(shù): 創(chuàng)建餅圖
opts.InitOpts參數(shù): Pie(init_opts=opts.InitOpts(width="1400px", height="800px"))
init_opts: 指定參數(shù)名 opts.InitOpts: 配置選項(xiàng)
width="1400px" height="800px" :界面的寬度和高度
給餅圖添加數(shù)據(jù):
add()函數(shù):
參數(shù)1: 名稱
參數(shù)2: 具體數(shù)據(jù), 數(shù)據(jù)類型為==>[(a,b),(a,b),(a,b)]==>a為數(shù)據(jù)名稱,b為數(shù)據(jù)大小
參數(shù)3: 標(biāo)簽設(shè)置 label_opts=opts.LabelOpts(formatter=':s0sssss00s%') 符合百分比的形式
給餅圖添設(shè)置標(biāo)題:
set_global_opts()函數(shù) :
title_opts=opts.TitleOpts : 設(shè)置標(biāo)題
title="2020年世界GDP排名", subtitle="美元" : 設(shè)置主標(biāo)題和副標(biāo)題
保存數(shù)據(jù):
4、完整代碼
5、小結(jié)
可視化
Pie()函數(shù) : 創(chuàng)建餅圖
add()函數(shù) : 添加數(shù)據(jù)
set_global_opts()函數(shù) : 設(shè)置標(biāo)題
render()函數(shù) : 保存數(shù)據(jù)
七、Logging日志模塊
1、logging日志的介紹
在現(xiàn)實(shí)生活中,記錄日志非常重要,比如:銀行轉(zhuǎn)賬時(shí)會(huì)有轉(zhuǎn)賬記錄;飛機(jī)飛行過程中,會(huì)有個(gè)黑盒子(飛行數(shù)據(jù)記錄器)記錄著飛機(jī)的飛行過程,那在咱們python程序中想要記錄程序在運(yùn)行時(shí)所產(chǎn)生的日志信息,怎么做呢?
可以使用 logging 這個(gè)包來完成
在軟件開發(fā)中,日志是一種記錄程序運(yùn)行過程中產(chǎn)生的重要信息的方式。日志可以幫助開發(fā)人員了解程序的運(yùn)行狀態(tài)、發(fā)現(xiàn)問題和進(jìn)行故障排查。Python提供了內(nèi)置的logging模塊,用于實(shí)現(xiàn)日志記錄功能。 logging模塊提供了一套靈活且易于使用的API,可以方便地在程序中添加日志記錄。以下是使用logging模塊進(jìn)行日志記錄的基本步驟:
導(dǎo)入logging模塊:
配置日志記錄器:
在這個(gè)例子中,使用basicConfig()函數(shù)配置了日志記錄器的級(jí)別、日志文件名和日志格式。level參數(shù)指定了日志記錄的級(jí)別,常見的級(jí)別有DEBUG、INFO、WARNING、ERROR和CRITICAL。filename參數(shù)指定了日志文件的名稱,如果不指定,則日志會(huì)輸出到控制臺(tái)。format參數(shù)指定了日志的格式,可以自定義日志的輸出格式。??
記錄程序日志信息的目的是:
可以很方便的了解程序的運(yùn)行情況
可以分析用戶的操作行為、喜好等信息
方便開發(fā)人員檢查bug
2、logging日志級(jí)別介紹
日志等級(jí)可以分為5個(gè),從低到高分別是:
DEBUG
INFO
WARNING
ERROR
CRITICAL
3、logging日志的使用
在 logging 包中記錄日志的方式有兩種:
輸出到控制臺(tái)
保存到日志文件
日志信息輸出到控制臺(tái)的示例代碼:
運(yùn)行結(jié)果:
說明:
日志信息只顯示了大于等于WARNING級(jí)別的日志,這說明默認(rèn)的日志級(jí)別設(shè)置為WARNING
logging日志等級(jí)和輸出格式的設(shè)置:
運(yùn)行結(jié)果:
日志等級(jí)說明:
DEBUG:程序調(diào)試bug時(shí)使用
INFO:程序正常運(yùn)行時(shí)使用
WARNING:程序未按預(yù)期運(yùn)行時(shí)使用,但并不是錯(cuò)誤,如:用戶登錄密碼錯(cuò)誤
ERROR:程序出錯(cuò)誤時(shí)使用,如:IO操作失敗
CRITICAL:特別嚴(yán)重的問題,導(dǎo)致程序不能再繼續(xù)運(yùn)行時(shí)使用,如:磁盤空間為空,一般很少使用
默認(rèn)的是WARNING等級(jí),當(dāng)在WARNING或WARNING之上等級(jí)的才記錄日志信息。
日志等級(jí)從低到高的順序是: DEBUG < INFO < WARNING < ERROR < CRITICAL
代碼說明:
level 表示設(shè)置的日志等級(jí)
format 表示日志的輸出格式, 參數(shù)說明:
%(levelname)s: 打印日志級(jí)別名稱
%(filename)s: 打印當(dāng)前執(zhí)行程序名
%(lineno)d: 打印日志的當(dāng)前行號(hào)
%(asctime)s: 打印日志的時(shí)間
%(message)s: 打印日志信息
日志信息保存到日志文件的示例代碼:
運(yùn)行結(jié)果:

4、logging日志在Web項(xiàng)目中應(yīng)用
使用logging日志示例:
程序入口模塊設(shè)置logging日志的設(shè)置
訪問index.html時(shí)進(jìn)行日志輸出,示例代碼:
訪問gdp.html時(shí)進(jìn)行日志輸出,示例代碼:
logging日志:

通過日志信息我們得知, index.html被訪問了2次, gdp.html被訪問了2次.
說明:
logging日志配置信息在程序入口模塊設(shè)置一次,整個(gè)程序都可以生效。
logging.basicConfig 表示 logging 日志配置操作
5、小結(jié)
記錄python程序中日志信息使用 logging 包來完成
logging日志等級(jí)有5個(gè):
DEBUG
INFO
WARNING
ERROR
CRITICAL
打印(記錄)日志的函數(shù)有5個(gè):
logging.debug函數(shù), 表示: 打印(記錄)DEBUG級(jí)別的日志信息
logging.info函數(shù), 表示: 打印(記錄)INFO級(jí)別的日志信息
logging.warning函數(shù), 表示: 打印(記錄)WARNING級(jí)別的日志信息
logging.error函數(shù), 表示: 打印(記錄)ERROR級(jí)別的日志信息
logging.critical函數(shù), 表示: 打印(記錄)CRITICAL級(jí)別的日志信息