《Python程序設(shè)計(jì)入門與實(shí)踐(第2版)》課件 第10章 綜合應(yīng)用案例實(shí)戰(zhàn)_第1頁
《Python程序設(shè)計(jì)入門與實(shí)踐(第2版)》課件 第10章 綜合應(yīng)用案例實(shí)戰(zhàn)_第2頁
《Python程序設(shè)計(jì)入門與實(shí)踐(第2版)》課件 第10章 綜合應(yīng)用案例實(shí)戰(zhàn)_第3頁
《Python程序設(shè)計(jì)入門與實(shí)踐(第2版)》課件 第10章 綜合應(yīng)用案例實(shí)戰(zhàn)_第4頁
《Python程序設(shè)計(jì)入門與實(shí)踐(第2版)》課件 第10章 綜合應(yīng)用案例實(shí)戰(zhàn)_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第10章綜合應(yīng)用案例實(shí)戰(zhàn)

本章學(xué)習(xí)目標(biāo)了解標(biāo)準(zhǔn)庫tkinter在GUI應(yīng)用程序開發(fā)方面的應(yīng)用了解SQLite數(shù)據(jù)庫基本操作并能編寫簡單數(shù)據(jù)庫應(yīng)用程序了解使用Python讀取Word、Excel、PowerPoint文件內(nèi)容的方法了解網(wǎng)絡(luò)爬蟲程序基本原理并能編寫簡單的爬蟲程序了解擴(kuò)展庫matplotlib在可視化方面的應(yīng)用10.1tkinter應(yīng)用開發(fā)-10.1.1tkinter基礎(chǔ)知識Python標(biāo)準(zhǔn)庫tkinter是對Tcl/Tk的進(jìn)一步封裝,是一套完整的GUI開發(fā)模塊的組合或套件,這些模塊共同提供了強(qiáng)大的跨平臺GUI編程的功能,所有的源碼文件位于Python安裝目錄中l(wèi)ib\tkinter文件夾。除了在__init__.py文件中提供了導(dǎo)入tkinter就可以使用的常用組件、常量和變量類型之外,還通過ttk模塊提供了Combobox、Progressbar和Treeview等組件,scrolledtext模塊中提供了帶滾動(dòng)條的文本框,messagebox、commondialog、dialog、colorchooser、simpledialog、filedialog等模塊提供了各種對話框,font模塊提供了與字體有關(guān)的對象,這些需要導(dǎo)入相應(yīng)的模塊之后才能使用。10.1.1tkinter基礎(chǔ)知識組件名稱說明Button按鈕Canvas畫布,用于繪制直線、橢圓、多邊形等各種圖形Checkbutton復(fù)選框形式的按鈕Entry單行文本框Frame框架,可作為其他組件的容器,常用來對組件進(jìn)行分組Label標(biāo)簽,常用來顯示單行文本Listbox列表框Menu菜單Message多行文本框Radiobutton單選鈕,同一組中的單選鈕任何時(shí)刻只能有一個(gè)處于選中狀態(tài)Scrollbar滾動(dòng)條Toplevel常用來創(chuàng)建新的窗口10.1.1tkinter基礎(chǔ)知識buttonImport=tkinter.Button(root,text='導(dǎo)入學(xué)生信息',command=buttonImportClick)參數(shù)root用來說明這次創(chuàng)建的按鈕是要放置在root這個(gè)應(yīng)用程序主界面上的,參數(shù)text用來設(shè)置按鈕上顯示的文本,參數(shù)command用來指定單擊該按鈕時(shí)要執(zhí)行的操作,這里buttonImportClick是一個(gè)自定義函數(shù)的名字,單擊按鈕之后會(huì)執(zhí)行buttonImportClick函數(shù)中的代碼。除此之外,常用的參數(shù)還有background(背景色)、bitmap(按鈕上顯示的位圖)、borderwidth(邊框?qū)挾龋?、cursor(鼠標(biāo)形狀)、font(字體)、foreground(前景色)、justify(文本對齊方式)、height(高度)、width(寬度)等。10.1.1tkinter基礎(chǔ)知識按鈕組件的pack()和place()方法用來把按鈕組件放置到界面上,下面的代碼使用place()方法把按鈕放置到界面上距離左邊界和上邊界均為20個(gè)像素的位置:buttonImport.place(x=20,y=20,height=30,width=100)10.1.1tkinter基礎(chǔ)知識創(chuàng)建一個(gè)字符串變量,然后再創(chuàng)建一個(gè)輸入框(或單行文本框)Entry組件放置到界面上,并把字符串變量和輸入框綁定到一起。xuehao=tkinter.StringVar(root)entryXuehao=tkinter.Entry(root,#設(shè)置字體、字號font=('simhei',20),#設(shè)置前景色、背景色fg='red',bg='#66dddd',#綁定變量textvariable=xuehao)#放置到窗口上指定位置,并設(shè)置組件尺寸entryXuehao.place(x=100,y=5,width=150,height=40)10.1.1tkinter基礎(chǔ)知識使用tkinter開發(fā)GUI程序的基本步驟為:1)編寫通用代碼,例如數(shù)據(jù)庫操作、程序中需要多次調(diào)用的函數(shù)。2)創(chuàng)建應(yīng)用程序,搭建界面,放置菜單、標(biāo)簽、按鈕、輸入框、單選鈕、復(fù)選框、組合框等組件,設(shè)置組件的位置、寬度、高度、文本、顏色、字體等屬性以及必要的事件處理函數(shù)。3)編寫組件的事件處理函數(shù)代碼實(shí)現(xiàn)預(yù)定的業(yè)務(wù)邏輯。4)啟動(dòng)消息主循環(huán),啟動(dòng)應(yīng)用程序。10.1.2tkinter應(yīng)用開發(fā)綜合案例例10-1安裝Python之后,自帶的IDLE是一個(gè)簡單的Python代碼編輯和運(yùn)行環(huán)境,具有語法高亮、智能提示、自動(dòng)縮進(jìn)等功能。編寫程序,使用tkinter編寫Python代碼編輯器,實(shí)現(xiàn)代碼自動(dòng)縮進(jìn)與反縮進(jìn)以及語法高亮等基本功能,支持對直接輸入的代碼和復(fù)制來的代碼進(jìn)行自動(dòng)處理。code\例10-1.py10.1.2tkinter應(yīng)用開發(fā)綜合案例10.1.2tkinter應(yīng)用開發(fā)綜合案例例10-2編寫程序,使用tkinter設(shè)計(jì)界面,輸入網(wǎng)址URL之后,使用Python擴(kuò)展庫qrcode生成一個(gè)二維碼圖片,微信掃描二維碼可以直接跳轉(zhuǎn)到指定的頁面。code\例10-2.py10.2SQLite數(shù)據(jù)庫操作-10.2.1SQLite數(shù)據(jù)庫基礎(chǔ)SQLite是內(nèi)嵌在Python中的輕量級、基于磁盤文件的數(shù)據(jù)庫管理系統(tǒng),不需要安裝和配置服務(wù)器,支持使用SQL語句來訪問數(shù)據(jù)庫。該數(shù)據(jù)庫使用C語言開發(fā),支持大多數(shù)SQL91標(biāo)準(zhǔn),支持原子的、一致的、獨(dú)立的和持久的事務(wù),不支持外鍵限制;通過數(shù)據(jù)庫級的獨(dú)占性和共享鎖定來實(shí)現(xiàn)獨(dú)立事務(wù),當(dāng)多個(gè)線程同時(shí)訪問同一個(gè)數(shù)據(jù)庫并試圖寫入數(shù)據(jù)時(shí),每一時(shí)刻只有一個(gè)線程可以寫入數(shù)據(jù)。默認(rèn)情況下,SQLite數(shù)據(jù)庫必須和相應(yīng)的服務(wù)端程序在同一臺服務(wù)器上,除非自己編寫專門的代理程序。10.2.1SQLite數(shù)據(jù)庫基礎(chǔ)SQLite支持最大140TB大小的單個(gè)數(shù)據(jù)庫,每個(gè)數(shù)據(jù)庫完全存儲(chǔ)在單個(gè)磁盤文件中,一個(gè)數(shù)據(jù)庫就是一個(gè)文件,通過直接復(fù)制數(shù)據(jù)庫文件就可以實(shí)現(xiàn)備份。如果需要使用可視化管理工具來操作SQLite數(shù)據(jù)庫,可以使用SQLiteManager、SQLiteDatabaseBrowser或其他類似工具。10.2.1SQLite數(shù)據(jù)庫基礎(chǔ)在SQLite數(shù)據(jù)庫中,主要有以下幾種數(shù)據(jù)類型(或者說是存儲(chǔ)類別):NULL:值為一個(gè)NULL空值。INTEGER:值被標(biāo)識為整數(shù),依據(jù)值的大小可以依次被存儲(chǔ)為1,2,3,4,6或8個(gè)字節(jié)。REAL:所有值都是浮點(diǎn)數(shù)值,被存儲(chǔ)為8字節(jié)的IEEE浮點(diǎn)數(shù)。TEXT:值為文本字符串,使用數(shù)據(jù)庫編碼存儲(chǔ),如UTF-8、UTF-16-BE或UTF-16-LE。BLOB:值是數(shù)據(jù)的二進(jìn)制對象,如何輸入就如何存儲(chǔ),不改變格式。10.2.1SQLite數(shù)據(jù)庫基礎(chǔ)Python標(biāo)準(zhǔn)庫sqlite3提供了SQLite數(shù)據(jù)庫訪問接口,不需要額外配置,連接數(shù)據(jù)庫之后可以使用SQL語句對數(shù)據(jù)進(jìn)行增、刪、改、查等操作。10.2.1SQLite數(shù)據(jù)庫基礎(chǔ)>>>importsqlite3>>>conn=sqlite3.connect('test.db')#連接或創(chuàng)建數(shù)據(jù)庫>>>cur=conn.cursor()#創(chuàng)建游標(biāo)>>>cur.execute('CREATETABLEtableTest(field1numeric,field2text)')#創(chuàng)建數(shù)據(jù)表<sqlite3.Cursorobjectat0x000001C7AB3B43B0>>>>data=zip(range(5),'abcde')>>>cur.executemany('INSERTINTOtableTestvalues(?,?)',data)#問號是占位符,執(zhí)行時(shí)被替換#插入多條記錄<sqlite3.Cursorobjectat0x000001C7AB3B43B0>10.2.1SQLite數(shù)據(jù)庫基礎(chǔ)>>>cur.execute('SELECT*FROMtableTestORDERBYfield1DESC')#查詢記錄<sqlite3.Cursorobjectat0x000001C7AB3B43B0>>>>forrecincur.fetchall():print(rec)(4,'e')(3,'d')(2,'c')(1,'b')(0,'a')>>>mit()#提交事務(wù),保存數(shù)據(jù)10.2.2常用SQL語句(1)創(chuàng)建數(shù)據(jù)表CREATETABLEtablename(col1type1[NOTNULL][PRIMARYKEY],col2type2[NOTNULL],..)(2)刪除數(shù)據(jù)表DROPTABLEtablename(3)插入記錄INSERTINTOtablename(field1,field2)VALUES(value1,value2)10.2.2常用SQL語句(4)查詢記錄SELECT*FROMtablenameWHEREfield1>value1SELECTfield1,field2,field3FROMtablenameWHEREfield1LIKE'%value1%'SELECT*FROMtablenameWHEREfield1BETWEENvalue1ANDvalue2SELECT*FROMtablenameORDERBYfield1,field2DESCSELECTCOUNT(*)AStotalcountFROMtablenameSELECTSUM(field1)ASsumvalueFROMtablenameSELECTAVG(field1)ASavgvalueFROMtablenameSELECTMAX(field1)ASmaxvalueFROMtablenameSELECTMIN(field1)ASminvalueFROMtablenameSELECTTOP10*FROMtablenameWHEREfield1LIKE'%value1%'ORDERBYfield1SELECT*FROMtablenameWHEREfield1LIKE'%value1%'ORDERBYfield1LIMIT1010.2.2常用SQL語句(5)更新記錄UPDATEtablenameSETfield1=value1WHEREfield2=value2(6)刪除記錄DELETEFROMtablenameWHEREfield1=value110.2.3使用tkinter+SQLite開發(fā)個(gè)人通信錄管理系統(tǒng)本節(jié)通過一個(gè)通信錄管理系統(tǒng)來演示SQLite數(shù)據(jù)庫的應(yīng)用,程序界面使用tkinter開發(fā),可以結(jié)合10.1節(jié)的內(nèi)容和代碼中的注釋進(jìn)行理解,更多數(shù)據(jù)庫操作案例可以通過微信公眾號“Python小屋”歷史文章清單/s/u9FeqoBaA3Mr0fPCUMbpqA搜索“數(shù)據(jù)庫”找到相關(guān)技術(shù)文章進(jìn)行閱讀學(xué)習(xí)。10.2.3使用tkinter+SQLite開發(fā)個(gè)人通信錄管理系統(tǒng)例10-3編寫程序?qū)崿F(xiàn)通信錄管理系統(tǒng),使用SQLite數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù),使用tkinter設(shè)計(jì)界面。code\例10-3.pyw10.3Office文檔操作-10.3.1docx、xlsx、pptx文件操作基礎(chǔ)擴(kuò)展庫python-docx、docx2python提供了docx格式Word文檔操作的接口。擴(kuò)展庫python-docx可以使用pipinstallpython-docx命令進(jìn)行安裝,安裝之后叫docx。擴(kuò)展庫docx2python的安裝名稱和使用名稱是一致的。10.3.1docx、xlsx、pptx文件操作基礎(chǔ)在真正操作docx文件之前,需要對這種類型的文件結(jié)構(gòu)有一定的了解。在docx文件中,有很多sections(節(jié))、paragraphs(段落)、tables(表格)、inline_shapes(行內(nèi)元素)組成,其中每個(gè)段落又包括一個(gè)或多個(gè)run(一段連續(xù)的具有相同格式的文本),每個(gè)表格又包含一個(gè)或多個(gè)rows(行)和columns(列),每行或列又包括多個(gè)cells(單元格)。所有這些對象都具有大量的屬性,通過這些屬性來讀取或控制Word文檔中的內(nèi)容和格式。10.3.1docx、xlsx、pptx文件操作基礎(chǔ)Python擴(kuò)展庫openpyxl提供了操作xlsx格式Excel文件的接口,可以使用pipinstallopenpyxl安裝這個(gè)擴(kuò)展庫。Anaconda3安裝包中已經(jīng)集成安裝了openpyxl,不需要再次安裝。每個(gè)Excel文件稱為一個(gè)workbook(工作簿),由若干worksheet(工作表)組成,每個(gè)工作表又由若干rows(行)和columns(列)組成,每個(gè)行和列由若干單元格組成。在單元格中可以存儲(chǔ)整數(shù)、實(shí)數(shù)、字符串、公式、圖表等對象。10.3.1docx、xlsx、pptx文件操作基礎(chǔ)Python擴(kuò)展庫python-pptx提供了pptx格式PowerPoint文件操作的接口,可以使用pipinstallpython-pptx命令安裝,安裝之后的名字叫pptx。每個(gè)PowerPoint文件稱為一個(gè)Presentation(演示文檔),每個(gè)Presentation對象包含一個(gè)由所有幻燈片組成的屬性slides,每個(gè)幻燈片對象的屬性Shapes包含了這一頁幻燈片上的所有元素,可以是TEXT_BOX(文本框)、PICTURE(圖片)、CHART(圖表)、TABLE(表格)或其他等元素,分別對應(yīng)不同的shape_type屬性值。10.3.2查找包含特定關(guān)鍵字的Word、Excel、PowerPoint文件例10-4編寫程序,搜索并輸出當(dāng)前文件夾中包含特定關(guān)鍵字字符串的Word、Excel、PowerPoint文件名。code\例10-4.py使用方法:c:\Python313\Python.exe例10-4.py董付國c:\Python313\Python.exe例10-4.py/s董付國10.4網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)-10.4.1requests基本操作Python擴(kuò)展庫requests提供了比標(biāo)準(zhǔn)庫urllib更簡潔的形式來處理HTTP協(xié)議和獲取網(wǎng)頁內(nèi)容,也是比較常用的爬蟲工具之一,使用pip可以直接在線安裝。10.4.1requests基本操作下面的代碼演示了增加頭部并設(shè)置訪問代理的用法:>>>url='/some/endpoint'>>>headers={'user-agent':'my-app/0.0.1'}>>>r=requests.get(url,headers=headers)10.4.1requests基本操作下面的代碼演示了以POST方式訪問網(wǎng)頁并提交數(shù)據(jù)的用法:>>>payload={'key1':'value1','key2':'value2'}>>>r=requests.post("/post",data=payload)>>>print(r.text)#查看網(wǎng)頁信息,略去輸出結(jié)果>>>url='/some/endpoint'>>>payload={'some':'data'}>>>r=requests.post(url,json=payload)>>>print(r.text)#查看網(wǎng)頁信息,略去輸出結(jié)果>>>print(r.headers)#查看頭部信息,略去輸出結(jié)果>>>print(r.headers['Content-Type'])application/json;charset=utf-8>>>print(r.headers['Content-Encoding'])gzip10.4.1requests基本操作下面的代碼演示了get()方法的cookies參數(shù)的用法:>>>r=requests.get("/")>>>print(r.cookies)#查看cookies<RequestsCookieJar[Cookie(version=0,name='BDORZ',value='27315',port=None,port_specified=False,domain='.',domain_specified=True,domain_initial_dot=True,path='/',path_specified=True,secure=False,expires=1521533127,discard=False,comment=None,comment_url=None,rest={},rfc2109=False)]>>>>url='/cookies'>>>cookies=dict(cookies_are='working')>>>r=requests.get(url,cookies=cookies)#設(shè)置cookies>>>print(r.text){"cookies":{"cookies_are":"working"}}10.4.2BeautifulSoup基本操作BeautifulSoup是一個(gè)非常優(yōu)秀的Python擴(kuò)展庫,可以用來從HTML或XML文件內(nèi)容中提取感興趣的數(shù)據(jù),允許指定使用不同的解析器??梢允褂胮ipinstallbeautifulsoup4直接進(jìn)行安裝,安裝之后應(yīng)使用frombs4importBeautifulSoup導(dǎo)入并使用。10.4.2BeautifulSoup基本操作>>>frombs4importBeautifulSoup>>>BeautifulSoup('helloworld!','lxml')#自動(dòng)添加和補(bǔ)全標(biāo)簽<html><body><p>helloworld!</p></body></html>>>>html_doc="""<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p>"""10.4.2BeautifulSoup基本操作>>>soup=BeautifulSoup(html_doc,'html.parser')>>>print(soup.prettify())<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<aclass="sister"href="/elsie"id="link1">Elsie</a>,<aclass="sister"href="/lacie"id="link2">Lacie</a>and<aclass="sister"href="/tillie"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>10.4.2BeautifulSoup基本操作>>>print(soup.title)#訪問特定的標(biāo)簽<title>TheDormouse'sstory</title>>>>print()#標(biāo)簽名字title>>>print(soup.title.text)#標(biāo)簽文本TheDormouse'sstory>>>print(soup.title.string)TheDormouse'sstory>>>print(soup.title.parent)#上一級標(biāo)簽<head><title>TheDormouse'sstory</title></head>>>>print(soup.head)<head><title>TheDormouse'sstory</title></head>>>>print(soup.b)#使用不同形式訪問標(biāo)簽<b>TheDormouse'sstory</b>>>>print(soup.body.b)<b>TheDormouse'sstory</b>>>>print()#把整個(gè)BeautifulSoup對象看做標(biāo)簽對象[document]10.4.2BeautifulSoup基本操作>>>print(soup.body)<body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<aclass="sister"href="/elsie"id="link1">Elsie</a>,<aclass="sister"href="/lacie"id="link2">Lacie</a>and<aclass="sister"href="/tillie"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body>10.4.2BeautifulSoup基本操作>>>print(soup.p)<pclass="title"><b>TheDormouse'sstory</b></p>>>>print(soup.p['class'])#標(biāo)簽屬性['title']>>>print(soup.p.get('class'))#也可以這樣查看標(biāo)簽屬性['title']>>>print(soup.p.text)TheDormouse'sstory>>>print(soup.p.contents)[<b>TheDormouse'sstory</b>]>>>print(soup.a)<aclass="sister"href="/elsie"id="link1">Elsie</a>>>>print(soup.a.attrs)#查看標(biāo)簽所有屬性{'class':['sister'],'href':'/elsie','id':'link1'}10.4.2BeautifulSoup基本操作>>>print(soup.find_all('a'))#查找所有<a>標(biāo)簽[<aclass="sister"href="/elsie"id="link1">Elsie</a>,<aclass="sister"href="/lacie"id="link2">Lacie</a>,<aclass="sister"href="/tillie"id="link3">Tillie</a>]>>>print(soup.find_all(['a','b']))#同時(shí)查找<a>和<b>標(biāo)簽[<b>TheDormouse'sstory</b>,<aclass="sister"href="/elsie"id="link1">Elsie</a>,<aclass="sister"href="/lacie"id="link2">Lacie</a>,<aclass="sister"href="/tillie"id="link3">Tillie</a>]10.4.2BeautifulSoup基本操作>>>importre#導(dǎo)入正則表達(dá)式模塊>>>print(soup.find_all(href=pile('elsie')))#查找href包含特定關(guān)鍵字的標(biāo)簽[<aclass="sister"href="/elsie"id="link1">Elsie</a>]>>>print(soup.find(id='link3'))<aclass="sister"href="/tillie"id="link3">Tillie</a>>>>print(soup.find_all('a',id='link3'))[<aclass="sister"href="/tillie"id="link3">Tillie</a>]>>>forlinkinsoup.find_all('a'):print(link.text,':',link.get('href'))

Elsie:/elsieLacie:/lacieTillie:/tillie10.4.2BeautifulSoup基本操作>>>print(soup.get_text())#返回所有文本TheDormouse'sstoryTheDormouse'sstoryOnceuponatimetherewerethreelittlesisters;andtheirnameswereElsie,LacieandTillie;andtheylivedatthebottomofawell....>>>soup.a['id']='test_link1'#修改標(biāo)簽屬性的值>>>print(soup.a)<aclass="sister"href="/elsie"id="test_link1">Elsie</a>>>>soup.a.string.replace_with('test_Elsie')#修改標(biāo)簽文本'Elsie'>>>print(soup.a.string)'test_Elsie'10.4.2BeautifulSoup基本操作>>>print(soup.prettify())<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<aclass="sister"href="/elsie"id="test_link1">test_Elsie</a>,<aclass="sister"href="/lacie"id="link2">Lacie</a>and<aclass="sister"href="/tillie"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>10.4.2BeautifulSoup基本操作>>>forchildinsoup.body.children:#遍歷直接子標(biāo)簽print(child)<pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<aclass="sister"href="/elsie"id="test_link1">test_Elsie</a>,<aclass="sister"href="/lacie"id="link2">Lacie</a>and<aclass="sister"href="/tillie"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p>>>>forstringinsoup.strings:#遍歷所有文本,結(jié)果略print(string)10.4.2BeautifulSoup基本操作>>>test_doc='<html><head></head><body><p></p><p></p></body></heml>'>>>s=BeautifulSoup(test_doc,'lxml')>>>forchildins.html.children:#遍歷直接子標(biāo)簽 print(child)

<head></head><body><p></p><p></p></body>>>>forchildins.html.descendants:#遍歷子孫標(biāo)簽 print(child)

<head></head><body><p></p><p></p></body><p></p><p></p>10.4.3爬取微信公眾號歷史文章例10-5編寫網(wǎng)絡(luò)爬蟲程序,爬取微信公眾號“Python小屋”歷史文章并把內(nèi)容寫入本地Word文件,每篇文章生成一個(gè)Word文件。code\例10-5.py10.5數(shù)據(jù)分析與處理實(shí)戰(zhàn)--10.5.1數(shù)據(jù)分析與處理簡介數(shù)據(jù)分析(DataAnalysis)是指采用合適的統(tǒng)計(jì)分析方法對歷史數(shù)據(jù)進(jìn)行分析、概括和總結(jié),對數(shù)據(jù)進(jìn)行恰當(dāng)?shù)拿枋龊捅磉_(dá)之后借助于數(shù)學(xué)與統(tǒng)計(jì)學(xué)理論、計(jì)算機(jī)技術(shù)以及相關(guān)工具和編程語言進(jìn)行分析和處理,試圖發(fā)現(xiàn)、總結(jié)數(shù)據(jù)背后隱藏的規(guī)律和提取有用信息,最終利用這些規(guī)律和信息對下一步的決策提供有效支持。一般來說,數(shù)據(jù)分析任務(wù)都有明確的目標(biāo)和要解決的問題(例如,發(fā)現(xiàn)發(fā)生了什么、分析為什么會(huì)這樣、預(yù)測可能還會(huì)發(fā)生什么、決定下一步需要做什么來引導(dǎo)事物良性發(fā)展或避免災(zāi)難事件發(fā)生),數(shù)據(jù)選擇和分析角度、分析方法、分析目的都具有很強(qiáng)的針對性。10.5.1數(shù)據(jù)分析與處理簡介連鎖超市分店選址、飯店選址、機(jī)場與火車站選址、公交路線與站牌規(guī)劃、地鐵和公交車的班次規(guī)劃、物流路線規(guī)劃、春運(yùn)加班車次安排、原材料選購、商場進(jìn)貨與貨架位置擺放、查找隱性貧困生、共享單車投放位置與時(shí)間規(guī)劃、疫情期間確診人員的軌跡和密接人員分析、各國疫情走勢和疫苗進(jìn)展分析、各單位員工業(yè)績考核、各城市降水量比較與自然災(zāi)害預(yù)防、高考志愿填報(bào)、房價(jià)預(yù)測、股票預(yù)測、尋找黑客攻擊向量、犯罪人員社交關(guān)系挖掘、用戶畫像、網(wǎng)絡(luò)布線、潛在客戶挖掘與高端客戶服務(wù)定制、個(gè)人誠信等級判斷與還貸能力預(yù)測、異常交易分析、網(wǎng)絡(luò)流量預(yù)測、成本控制與優(yōu)化、用戶留存分析、客戶關(guān)系分析、商品推薦、手機(jī)套餐選擇、文本分類與挖掘、筆跡識別與分析、智能交通、智能醫(yī)療、數(shù)據(jù)脫敏。10.5.1數(shù)據(jù)分析與處理簡介在實(shí)際應(yīng)用中,我們幾乎不可能拿到能夠直接使用并進(jìn)行處理、分析、挖掘和可視化的高質(zhì)量數(shù)據(jù),絕大多數(shù)數(shù)據(jù)都存在各種各樣的問題,例如數(shù)據(jù)錯(cuò)誤、冗余、不一致,或者包含缺失值、重復(fù)值、異常值。Pandas是Pythondataanalysis的簡稱,是基于NumPy擴(kuò)展庫構(gòu)建的專注于數(shù)據(jù)分析與數(shù)據(jù)處理的Python擴(kuò)展庫,目前已廣泛應(yīng)用于統(tǒng)計(jì)、金融、經(jīng)濟(jì)學(xué)甚至辦公自動(dòng)化等幾乎所有學(xué)科、行業(yè)和領(lǐng)域,是使得Python成為數(shù)據(jù)科學(xué)相關(guān)領(lǐng)域首選語言的重要擴(kuò)展庫之一。10.5.2數(shù)據(jù)分析與處理案例例10-6

模擬轉(zhuǎn)盤抽獎(jiǎng)游戲,統(tǒng)計(jì)不同獎(jiǎng)項(xiàng)的獲獎(jiǎng)概率。importnumpyasnpimportpandasaspddata=np.random.ranf(100000)#模擬轉(zhuǎn)盤100000次category=(0.0,0.08,0.3,1.0)#獎(jiǎng)項(xiàng)等級劃分labels=('一等獎(jiǎng)','二等獎(jiǎng)','三等獎(jiǎng)')result=pd.cut(data,category,labels=labels)result=pd.value_counts(result)#統(tǒng)計(jì)每個(gè)獎(jiǎng)項(xiàng)的獲獎(jiǎng)次數(shù)print(result)10.5.2數(shù)據(jù)分析與處理案例例10-7

假設(shè)有個(gè)Excel文件“電影導(dǎo)演演員.xlsx”,其中有三列分別為電影名稱、導(dǎo)演和演員列表(同一個(gè)電影可能會(huì)有多個(gè)演員,每個(gè)演員姓名之間使用中文全角逗號分隔),格式如圖10-4所示。要求統(tǒng)計(jì)每個(gè)演員的參演電影數(shù)量,并統(tǒng)計(jì)最受歡迎的前3個(gè)演員。10.5.2數(shù)據(jù)分析與處理案例importpandasaspddf=pd.read_excel('電影導(dǎo)演演員.xlsx')#方法一print(pd.value_counts(','.join(df.演員.values).split(',')).nlargest(3))#方法二df.演員=df.演員.str.split(',')print(df.explode('演員').groupby('演員').count().nlargest(3,'電影名稱')['電影名稱'])10.5.2數(shù)據(jù)分析與處理案例例10-8

爬取網(wǎng)頁上的表格,保存為本地Excel文件。10.5.2數(shù)據(jù)分析與處理案例importpandasaspd#要讀取的網(wǎng)頁URL或本地HTML文件路徑url=r'/s/RtFzEm2TnGHnLTHMz9T4Aw'#返回包含若干DataFrame的列表#網(wǎng)頁上每個(gè)表格對應(yīng)一個(gè)DataFrame,每個(gè)DataFrame自動(dòng)以非負(fù)整數(shù)作為行標(biāo)簽和列標(biāo)簽dfs=pd.read_html(url)#寫入Excel文件,每個(gè)DataFrame對應(yīng)一個(gè)工作表withpd.ExcelWriter('result.xlsx')aswt:forindex,dfinenumerate(dfs,start=1):df.to_excel(wt,sheet_name=f'sheet{index}',index=False,header=False)10.5.2數(shù)據(jù)分析與處理案例例10-9

讀取Excel文件中學(xué)生多次參加多門課程考試的數(shù)據(jù),內(nèi)容格式為姓名

課程

成績李坤

英語 69李艷

數(shù)學(xué) 78趙坤

數(shù)學(xué) 82編寫程序,統(tǒng)計(jì)每個(gè)學(xué)生每門課程的最高分,寫入新的Excel文件。10.5.2數(shù)據(jù)分析與處理案例importpandasaspdfn='學(xué)生測試成績.xlsx'df=pd.read_excel(fn)result=df.groupby(['姓名','課程'],as_index=False).max()result.to_excel('成績統(tǒng)計(jì)結(jié)果.xlsx',sheet_name='各科最高分',index=False)10.6數(shù)據(jù)可視化實(shí)戰(zhàn)-10.6.1matplotlib擴(kuò)展庫基本操作Python擴(kuò)展庫matplotlib包括pylab、pyplot等繪圖模塊以及大量用于字體、顏色、圖例等圖形元素的管理與控制的模塊。其中pylab和pyplot模塊提供了類似于MATLAB的繪圖接口,支持線條樣式、字體屬性、軸屬性以及其他屬性的管理和控制,可以使用非常簡潔的代碼繪制出優(yōu)美的各種圖案。10.6.1matplotlib擴(kuò)展庫基本操作使用pylab或pyplot繪圖時(shí)一般過程為:讀入或創(chuàng)建數(shù)據(jù),根據(jù)實(shí)際需要?jiǎng)?chuàng)建直角坐標(biāo)系或極坐標(biāo)系軸域,繪制折線圖、散點(diǎn)圖、柱狀圖、餅狀圖、雷達(dá)圖或三維曲線和曲面,接下來設(shè)置軸和圖形屬性,最后顯示或保存繪圖結(jié)果。10.6.2數(shù)據(jù)可視化案例例10-10編寫程序,模擬轉(zhuǎn)盤抽獎(jiǎng)游戲。程序運(yùn)行之后,繪制一個(gè)餅狀圖模擬轉(zhuǎn)盤上的獎(jiǎng)項(xiàng)劃分,繪制一條從餅狀圖中心到邊緣的半徑模擬轉(zhuǎn)盤上的指針,在餅狀圖下面創(chuàng)建一個(gè)按鈕。單擊按鈕之后,指針開始以越來越慢的速度轉(zhuǎn)動(dòng),根據(jù)最終停下時(shí)所處的位置判斷中了幾等獎(jiǎng)。code\例10-10.py10.7網(wǎng)頁設(shè)計(jì)與網(wǎng)站開發(fā)實(shí)戰(zhàn)例10-11

使用Python+Flask開發(fā)網(wǎng)站實(shí)現(xiàn)素?cái)?shù)判斷。10.7網(wǎng)頁設(shè)計(jì)與網(wǎng)站開發(fā)實(shí)戰(zhàn)使用命令pipinstallflask安裝擴(kuò)展庫flask,創(chuàng)建網(wǎng)站根目錄對應(yīng)的文件夾web_is_prime和模板文件夾web_is_prime\templates。創(chuàng)建模板文件web_is_prime/templates/about.htmlcode\web_is_prime\templates\ab

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論