最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Python簡(jiǎn)單爬蟲實(shí)踐案例

2023-06-28 10:57 作者:程序員四次元ポケット  | 我要投稿

學(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ù)器:

  1. 訪問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ù)器和瀏覽器的通訊流程一般如下:

  1. 瀏覽器向Web服務(wù)器發(fā)送HTTP請(qǐng)求。

  2. Web服務(wù)器接收到請(qǐng)求后,根據(jù)請(qǐng)求的內(nèi)容生成相應(yīng)的HTTP響應(yīng)。

  3. Web服務(wù)器將HTTP響應(yīng)返回給瀏覽器。

  4. 瀏覽器接收到HTTP響應(yīng)后,解析響應(yīng)內(nèi)容并渲染頁(yè)面。

  5. 如果頁(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ù)器的通訊流程:

  1. 瀏覽器 (127.0.0.1/index.html) ==> 向Web服務(wù)器請(qǐng)求index.html

  2. Web服務(wù)器 (返回index.html) ==> 瀏覽器

  3. 瀏覽器解析index.html發(fā)現(xiàn)需要0.jpg ==>發(fā)送請(qǐng)求給 Web服務(wù)器請(qǐng)求0.jpg

  4. 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ù)器。下面是代碼的解釋:

  1. 首先,導(dǎo)入所需的模塊:

  2. FastAPI模塊用于創(chuàng)建Web應(yīng)用程序。

  3. Response模塊用于構(gòu)建HTTP響應(yīng)。

  4. uvicorn模塊用于運(yùn)行服務(wù)器。

  5. 創(chuàng)建FastAPI的實(shí)例對(duì)象 app。

  6. 定義了多個(gè)路由處理函數(shù),每個(gè)函數(shù)對(duì)應(yīng)一個(gè)URL路徑。每一個(gè)函數(shù)中,它們會(huì)打開并讀取指定的圖片文件或HTML文件。

  7. 當(dāng)訪問 /images/0.jpg 路徑時(shí),執(zhí)行 func_01() 函數(shù)。該函數(shù)打開名為 0.jpg 的圖片文件,讀取文件的內(nèi)容,并返回一個(gè)含有圖片內(nèi)容的HTTP響應(yīng)。

  8. 同樣的方式定義了 /images/1.jpg 至 /images/6.jpg 路徑對(duì)應(yīng)的函數(shù)。

  9. 當(dāng)訪問 /gdp.html 路徑時(shí),執(zhí)行 func_08() 函數(shù)。該函數(shù)打開名為 gdp.html 的HTML文件,讀取文件的內(nèi)容,并返回一個(gè)含有HTML內(nèi)容的HTTP響應(yīng)。

  10. 當(dāng)訪問 /index.html 路徑時(shí),執(zhí)行 main() 函數(shù)。該函數(shù)打開名為 index.html 的HTML文件,讀取文件的內(nèi)容,并返回一個(gè)含有HTML內(nèi)容的HTTP響應(yīng)。

  11. 最后,使用 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ù)器。以下是代碼的解釋:

  1. 導(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ù)器。

  2. 創(chuàng)建FastAPI應(yīng)用程序?qū)ο螅菏褂胊pp = FastAPI()創(chuàng)建了FastAPI框架的應(yīng)用程序?qū)ο蟆?/p>

  3. 定義路由和處理函數(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


☆ ?爬取照片的步驟

  1. 獲取index.html代碼

  2. 解析index.html代碼獲取圖片url

  3. 通過圖片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)了以下功能:

  1. 導(dǎo)入了requests和re模塊。

  2. 定義了一個(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)過程如下:

  1. 導(dǎo)入requests和re模塊。

  2. 創(chuàng)建兩個(gè)空列表country_list和gdp_list,用于存儲(chǔ)爬取到的國(guó)家名字和GDP數(shù)據(jù)。

  3. 定義一個(gè)函數(shù)get_gdp_data(),用于獲取GDP數(shù)據(jù)。

  4. 在函數(shù)中,首先使用requests.get()函數(shù)獲取網(wǎng)頁(yè)的HTML數(shù)據(jù),并將其解碼為utf8格式。

  5. 將獲取到的HTML數(shù)據(jù)按行分割,得到一個(gè)列表data_list。

  6. 遍歷data_list列表,對(duì)每一行的HTML數(shù)據(jù)進(jìn)行解析。

  7. 使用re.match()函數(shù)對(duì)每一行的HTML數(shù)據(jù)進(jìn)行匹配,以獲取國(guó)家名字和GDP數(shù)據(jù)。

  8. 如果匹配成功,將國(guó)家名字存放到country_list列表中,將GDP數(shù)據(jù)存放到gdp_list列表中。

  9. 將country_list和gdp_list兩個(gè)列表融合成一個(gè)列表gdp_data。

  10. 最后,打印出gdp_data列表。

  11. 在主程序中,調(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 誕生了. 特性:

  1. 簡(jiǎn)潔的API設(shè)計(jì),使用如絲滑般流暢,支持鏈?zhǔn)秸{(diào)用

  2. 囊括了30+種常見圖表,應(yīng)有盡有

  3. 支持主流Notebook 環(huán)境,Jupyter Notebook 和JupyterLab

  4. 可輕松集成至Flask, Django等主流Web框架

  5. 高度靈活的配置項(xiàng),可輕松搭配出精美的圖表

  6. 詳細(xì)的文檔和示例,幫助開發(fā)者更快的上手項(xiàng)目

  7. 多達(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)行日志記錄的基本步驟:

  1. 導(dǎo)入logging模塊:

  1. 配置日志記錄器:

在這個(gè)例子中,使用basicConfig()函數(shù)配置了日志記錄器的級(jí)別、日志文件名和日志格式。level參數(shù)指定了日志記錄的級(jí)別,常見的級(jí)別有DEBUG、INFO、WARNING、ERROR和CRITICAL。filename參數(shù)指定了日志文件的名稱,如果不指定,則日志會(huì)輸出到控制臺(tái)。format參數(shù)指定了日志的格式,可以自定義日志的輸出格式。??

記錄程序日志信息的目的是:

  1. 可以很方便的了解程序的運(yùn)行情況

  2. 可以分析用戶的操作行為、喜好等信息

  3. 方便開發(fā)人員檢查bug

2、logging日志級(jí)別介紹

日志等級(jí)可以分為5個(gè),從低到高分別是:

  1. DEBUG

  2. INFO

  3. WARNING

  4. ERROR

  5. CRITICAL


3、logging日志的使用

在 logging 包中記錄日志的方式有兩種:

  1. 輸出到控制臺(tái)

  2. 保存到日志文件

日志信息輸出到控制臺(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í)別的日志信息


Python簡(jiǎn)單爬蟲實(shí)踐案例的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
茶陵县| 英山县| 浮山县| 元氏县| 那坡县| 南通市| 保定市| 武平县| 饶平县| 霍山县| 吴川市| 囊谦县| 涿州市| 西平县| 砚山县| 湘潭县| 琼结县| 新源县| 玉树县| 溧阳市| 峡江县| 德庆县| 石嘴山市| 南宫市| 广丰县| 英德市| 乌恰县| 巴彦淖尔市| 文登市| 马公市| 池州市| 贵阳市| 秦皇岛市| 桂阳县| 米林县| 延边| 乳源| 安多县| 重庆市| 浠水县| 特克斯县|