Python程序設計基礎(chǔ)與實戰(zhàn)課件_第1頁
Python程序設計基礎(chǔ)與實戰(zhàn)課件_第2頁
Python程序設計基礎(chǔ)與實戰(zhàn)課件_第3頁
Python程序設計基礎(chǔ)與實戰(zhàn)課件_第4頁
Python程序設計基礎(chǔ)與實戰(zhàn)課件_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第13章網(wǎng)絡爬蟲與數(shù)據(jù)可視化實戰(zhàn)網(wǎng)絡爬蟲概述模塊6:requests庫的使用模塊7:beautifulsoup4庫的使用實戰(zhàn)20:電影排行爬取及分析模塊8:openpyxl庫的使用實戰(zhàn)21:Python職位分析及可視化掌握網(wǎng)絡爬蟲的基本工作流程理解requests模塊訪問URL的過程運用beautifulsoup4模塊解析和處理HTML掌握openpyxl模塊進行xlsx文件的存取和可視化的方法13.1網(wǎng)絡爬蟲概述網(wǎng)絡爬蟲的概念網(wǎng)絡爬蟲的基本工作流程13.1網(wǎng)絡爬蟲概述13.1.1網(wǎng)絡爬蟲的概念網(wǎng)絡爬蟲(WebCrawler)是按照一定的規(guī)則,自動地抓取萬維網(wǎng)(WorldWideWeb,WWW)并獲取信息的程序或腳本。在瀏覽器的網(wǎng)頁中,除了供用戶閱讀的文字信息外,還包括一些超鏈接,網(wǎng)絡爬蟲可以通經(jīng)過網(wǎng)頁中的超鏈接不斷地獲得網(wǎng)絡上的其它頁面。網(wǎng)絡數(shù)據(jù)采集的過程像爬蟲在網(wǎng)絡上漫游,因此得名為網(wǎng)絡爬蟲。13.1網(wǎng)絡爬蟲概述13.1.1網(wǎng)絡爬蟲的概念網(wǎng)絡爬蟲時需要考慮爬蟲合法性。Robots協(xié)議的全稱是“網(wǎng)絡爬蟲排除標準”(RobotsExclusionProtocol),也稱為爬蟲協(xié)議,是國際互聯(lián)網(wǎng)中的一種通用道德規(guī)范。網(wǎng)站管理者可以通過robot.txt文件列出不允許爬蟲爬取的鏈接,以表達是否希望爬蟲獲取網(wǎng)絡數(shù)據(jù)的意愿。Robots協(xié)議并非強制的命令,而是約定俗成的標準,大多數(shù)的搜索引擎都會遵守此協(xié)議,建議個人也能夠按照此協(xié)議的要求合理地使用網(wǎng)絡爬蟲技術(shù)。13.1網(wǎng)絡爬蟲概述13.1.2網(wǎng)絡爬蟲的基本工作流程簡單的網(wǎng)絡爬蟲通常分為以下三個部分的內(nèi)容:數(shù)據(jù)采集,即獲取網(wǎng)頁中的數(shù)據(jù);數(shù)據(jù)處理,即進行網(wǎng)頁解析;數(shù)據(jù)存儲,即將有用的信息持久化。13.1網(wǎng)絡爬蟲概述13.1.2網(wǎng)絡爬蟲的基本工作流程設定抓取目標(初始URL)并獲取頁面。不斷地爬取頁面,直到滿足停止爬取的條件。對于獲取的頁面,進行網(wǎng)頁下載,獲得網(wǎng)頁中的數(shù)據(jù)。獲得網(wǎng)頁中的數(shù)據(jù)需要用到Python中的requests模塊。獲取網(wǎng)頁中的數(shù)據(jù)后,需要對此數(shù)據(jù)進行解析。進行網(wǎng)頁解析需要用到Python中的beautifulsoup4模塊。對于網(wǎng)頁解析出來的數(shù)據(jù),可以對有用的信息進行存儲。有用的信息,可以存儲在文件中,也可以存儲在數(shù)據(jù)庫中,本章將選擇存放在MicrosoftOfficeEXCEL中的xlsx文件中。對xlsx文件進行操作有多個模塊可以使用,本章中選擇第三方庫openpyxl,不但可以進行xlsx文件的讀寫,還可以進行可視化的展示。13.1網(wǎng)絡爬蟲概述13.1.2網(wǎng)絡爬蟲的基本工作流程pipinstallrequestspipinstallbeautifulsoup4pipinstallopenpyxl13.2模塊6:requests庫的使用requests庫的基本介紹requests庫的基本操作13.2模塊6:requests庫的使用13.2.1requests庫的基本介紹requests庫的本質(zhì)就是封裝了urllib3模塊,它可以模擬瀏覽器的請求,編寫過程更接近正常URL的訪問過程。requests庫的宗旨是服務于人類(forhumanbeings),具有以下功能特性:支持URL數(shù)據(jù)自動編碼;支持HTTP連接保持和連接池;支持使用Cookie保持會話;支持文件分塊上傳;支持自動確定相應內(nèi)容的編碼。支持連接超時處理和流數(shù)據(jù)下載。13.2模塊6:requests庫的使用13.2.1requests庫的基本介紹導入requests庫的具體語法格式如下。importrequests13.2模塊6:requests庫的使用13.2.2requests庫的基本操作HTTP協(xié)議(HyperTextTransferProtocol,超文本傳輸協(xié)議)是用于從WWW服務器傳輸超文本到本地瀏覽器的傳送協(xié)議。HTTP協(xié)議常用GET、POST、PUT和DELETE四種請求方法,requests庫通過模擬HTTP的請求來訪問網(wǎng)頁中的數(shù)據(jù)。此處需要注意HTTP協(xié)議中GET和POST請求的區(qū)別,GET請求是請求指定的頁面信息,返回實體主體;POST請求是向指定資源提交數(shù)據(jù)進行請求處理,數(shù)據(jù)會被包含在請求體中。13.2模塊6:requests庫的使用13.2.2requests庫的基本操作-網(wǎng)頁請求方法requests庫中包含與HTTP協(xié)議的請求相對應的方法,即網(wǎng)頁請求方法。方法說明requests.get(url[,timeout=n])對應于HTTP的GET方法,傳入要訪問的網(wǎng)址url,其中timout參數(shù)是可選的,表示每次請求超時時間為n秒,get()方法返回一個Response對象requests.post(url,data)對應于HTTP的POST方法,傳入訪問網(wǎng)址url以及要提交的數(shù)據(jù)data,返回一個Response對象requests.put(url,data)對應于HTTP的PUT方法,傳入訪問網(wǎng)址url以及要提交的數(shù)據(jù)data,返回一個Response對象requests.delete(url)對應于HTTP的DELETE方法,傳入要操作的網(wǎng)址url,返回一個Response對象13.2模塊6:requests庫的使用13.2.2requests庫的基本操作-網(wǎng)頁請求方法使用requests庫中的get()方法訪問“千鋒教育”官網(wǎng)網(wǎng)址importrequestsr=requests.get("")print(type(r))<class'requests.models.Response'>通過get()方法訪問網(wǎng)址,返回了一個Response對象13.2模塊6:requests庫的使用13.2.2requests庫的基本操作-Response對象Response對象代表的是響應內(nèi)容,其屬性如下表所示。屬性說明status_codeHTTP請求的狀態(tài),200表示連接成功,404表示請求的網(wǎng)頁不存在,500表示內(nèi)部服務器錯誤textHTTP響應內(nèi)容的字符串形式,即url對應的頁面內(nèi)容encodingHTTP響應內(nèi)容的編碼方式13.2模塊6:requests庫的使用13.2.2requests庫的基本操作-Response對象importrequestsr=requests.get("")r.encoding="utf-8"print(r.text)當獲取頁面內(nèi)容時,需要注意Response對象的編碼方式encoding默認為ISO-8859-1,如果頁面中含有中文字符,就會出現(xiàn)亂碼。此時,需要將Response對象的encoding屬性設置為utf-8。13.2模塊6:requests庫的使用13.2.2requests庫的基本操作-Response對象importrequestsdefget_html(url):try:r=requests.get(url)r.raise_for_status()r.encoding="utf-8"returnr.textexcept:return"獲取頁面異常"if__name__=="__main__":url=""print(get_html(url))requests庫在遇到無效的HTTP響應時,會拋出HTTPError異常。而Response對象具有raise_for_status()方法,在狀態(tài)碼status_code不是200時,就會主動拋出HTTPError異常。此方法可以有效地判斷網(wǎng)絡連接的狀態(tài),結(jié)合try...except語句捕獲異常,能夠保證程序正常運行地情況下,獲取爬取過程中出現(xiàn)的意外情況。原代碼正常運行。將get()方法的timeout參數(shù)設置為較小的0.0001,獲取網(wǎng)頁就有可能異常,即將第4行修改為如下代碼:r=requests.get(url,timeout=0.0001)運行結(jié)果如下。

獲取頁面異常13.3模塊7:beautifulsoup4庫的使用beautifulsoup4庫的基本介紹beautifulsoup4庫的常用操作13.3模塊7:beautifulsoup4庫的使用13.3.1beautifulsoup4庫的基本介紹通過requests庫獲取HTML頁面內(nèi)容后,需要進一步解析HTML格式,提取其中的有用數(shù)據(jù)。beautifulsoup4庫是一個可以解析HTML或者XML文件的Python庫,它具有以下3個特點。beautifulsoup4庫提供了用于瀏覽、搜索和修改解析樹的簡潔函數(shù),可以通過解析文檔為用戶提供需要抓取的數(shù)據(jù)。beautifulsoup4庫自動將輸入文檔穩(wěn)定轉(zhuǎn)換為Unicode編碼,輸出文檔轉(zhuǎn)換為utf-8編碼。不需要考慮編碼方式,除非文檔沒有指定編碼方式,此時beautifulsoup4庫不能自動識別編碼方式,需要說明一下原始編碼方式。beautifulsoup4庫能夠為用戶靈活地提供不同的解析策略或者是較快的交易速度。13.3模塊7:beautifulsoup4庫的使用13.3.1beautifulsoup4庫的基本介紹beautifulsoup4庫中最主要的是BeautifulSoup類,一般通過導入此類來解析網(wǎng)頁內(nèi)容。frombs4importBeautifulSoup13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作導入BeautifulSoup類后,可以創(chuàng)建BeautifulSoup對象。importrequestsfrombs4importBeautifulSoupurl=""r=requests.get(url)r.encoding="utf-8"soup=BeautifulSoup(r.text,"html.parser")print(type(soup))<class'bs4.BeautifulSoup'>13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作HTML格式HTML代碼中以尖括號“<>”包括的內(nèi)容稱為標簽,一般是成對存在的,例如<html>、<head>、<body>、<title>、<div>、<a>等被稱為開始標簽,與其成對存在的</html>、</head>等被稱為結(jié)束標簽。開始標簽和結(jié)束標簽以及兩者中間的內(nèi)容結(jié)合在一起被稱為HTML元素,在開始標簽后的class、href、style、title等稱為HTML元素的屬性。13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作HTML中的所有內(nèi)容都是節(jié)點,這些節(jié)點組成一個樹形結(jié)構(gòu)13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作元素中的文本信息往往是有用信息,下面將介紹用BeautifulSoup類解析HTML頁面中的有用信息,分為:節(jié)點選擇器方法選擇器13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作-節(jié)點選擇器通過BeautifulSoup對象的屬性可以選擇節(jié)點元素,并獲得節(jié)點的信息,這些屬性與HTML的標簽名稱相同。屬性說明headHTML頁面的<head>內(nèi)容titleHTML頁面的<title>內(nèi)容bodyHTML頁面的<body>內(nèi)容pHTML頁面的第一個<p>內(nèi)容aHTML頁面的第一個<a>內(nèi)容divHTML頁面的第一個<div>內(nèi)容stringsHTML頁面中所有的字符串(標簽的內(nèi)容),是一個生成器對象,可以用for循環(huán)遍歷stripped_stringsHTML頁面中的所有的非空字符串,是一個生成器對象,可以用for循環(huán)遍歷BeautifulSoup對象的常用屬性13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作-節(jié)點選擇器使用BeautifulSoup對象獲得元素內(nèi)容importrequestsfrombs4importBeautifulSoupurl=""r=requests.get(url)r.encoding="utf-8"soup=BeautifulSoup(r.text,"html.parser")print(soup.title)#獲取頁面的<title>內(nèi)容print(soup.p)#獲取頁面的第一個<p>內(nèi)容<title>千鋒教育-堅持教育初心,堅持面授品質(zhì),IT培訓良心品牌</title><pclass="bubble">小小千想和您聊一聊</p>13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作-節(jié)點選擇器如果想要獲得HTML標簽中各個屬性的內(nèi)容,則需要通過Tag對象的屬性去獲取屬性說明name獲取標簽的名稱,以字符串形式展示,例如div、a、p等attrs獲取標簽下所有的屬性,以字典形式展示,例如href、style等contents獲取標簽下所有子標簽的內(nèi)容,以列表形式展示string獲取標簽中所包含的文本,以字符串形式展示Tag對象的常用屬性13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作-節(jié)點選擇器使用BeautifulSoup對象獲得標簽的詳細信息importrequestsfrombs4importBeautifulSoupurl=""r=requests.get(url)r.encoding="utf-8"soup=BeautifulSoup(r.text,"html.parser")print("<p>標簽:",soup.p)print("<p>標簽的名稱:",)print("<p>標簽的屬性:",soup.p.attrs)print("<p>標簽的子標簽:",soup.p.contents)print("<p>標簽包含的文本內(nèi)容:",soup.p.string)<p>標簽:<pclass="bubble">小小千想和您聊一聊</p><p>標簽的名稱:p<p>標簽的屬性:{'class':['bubble']}<p>標簽的子標簽:['小小千想和您聊一聊']<p>標簽包含的文本內(nèi)容:小小千想和您聊一聊13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作-節(jié)點選擇器string屬性應遵循以下原則:標簽內(nèi)部嵌套多層標簽時,string屬性返回None;標簽內(nèi)部有一個標簽時,string屬性返回內(nèi)層標簽包含的文本內(nèi)容;標簽內(nèi)部沒有標簽時,string屬性返回其包含的文本內(nèi)容。13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作-方法選擇器在HTML頁面中,div、a、p等標簽往往不止一個,節(jié)點選擇器無法獲得所有同名標簽的內(nèi)容,此時就要選擇使用方法選擇器。使用BeautifulSoup類中的方法可以獲得HTML中的標簽內(nèi)容,主要的方法包括find()和find_all(),可以根據(jù)參數(shù)找到對應標簽,返回列表類型。BeautifulSoup.find(name,attrs,recursive,string)BeautifulSoup.find_all(name,attrs,recursive,string,limit)13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作-方法選擇器find()和find_all()方法中的參數(shù)說明參數(shù)說明name按照標簽名稱檢索,以字符串的形式表示,例如div、a、p等attrs按照標簽屬性值檢索,以JSON格式表示,列出屬性名稱及值recursive默認值是True,遞歸搜索所有的子元素,設置為False時只查找當前標簽下一層的元素。string檢索HTML文檔中的字符串內(nèi)容(文本),可以是字符串、正則表達式、列表等形式limit限制返回結(jié)果的數(shù)量,默認返回全部find()和find_all()的區(qū)別在于find()方法僅返回找到的第一個結(jié)果,而find_all()可以返回找到的所有結(jié)果,也就是說,find()方法相當于參數(shù)limit為1時的find_all()方法。13.3模塊7:beautifulsoup4庫的使用13.3.2beautifulsoup4庫的常用操作-方法選擇器importrefrombs4importBeautifulSoupurl=""r=requests.get(url)r.encoding="utf-8"soup=BeautifulSoup(r.text,"html.parser")print(soup.find_all("u"))foriteminsoup.find_all("u"):print(item.string,end="")[<u>HTML5</u>,<u>Java</u>,<u>Python</u>,<u>全鏈路設計</u>,<u>云計算</u>,<u>軟件測試</u>,<u>大數(shù)據(jù)</u>,<u>智能物聯(lián)網(wǎng)</u>,<u>Unity游戲開發(fā)</u>,<u>網(wǎng)絡安全</u>,<u>短視頻+直播電商</u>,<u>影視剪輯包裝</u>,<u>游戲原畫</u>,<u>區(qū)塊鏈</u>]HTML5JavaPython全鏈路設計云計算軟件測試大數(shù)據(jù)智能物聯(lián)網(wǎng)Unity游戲開發(fā)網(wǎng)絡安全短視頻+直播電商影視剪輯包裝游戲原畫區(qū)塊鏈使用find_all()方法獲得所有的<u>13.4實戰(zhàn)20:電影排行爬取及分析13.4實戰(zhàn)20:電影排行爬取及分析獲取網(wǎng)頁User-Agent(簡稱UA)大量的爬蟲請求會使服務器的壓力過大,使得網(wǎng)頁響應速度變慢,影響網(wǎng)站的政策運行,所以網(wǎng)站一般會檢驗UA來判斷發(fā)起請求的是不是機器人。故需要自己設置UA進行簡單偽裝。headers={"User-Agent":"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/535.1(KHTML,likeGecko)Chrome/14.0.835.163Safari/535.1"}需要將此鍵值對傳入requests庫中的get()方法,獲取網(wǎng)頁的函數(shù)可以寫成如下形式。defget_html(url,headers):r=requests.get(url,headers=headers)html=r.text13.4實戰(zhàn)20:電影排行爬取及分析解析網(wǎng)頁定位文本內(nèi)容所在標簽13.4實戰(zhàn)20:電影排行爬取及分析解析網(wǎng)頁標簽中的有用內(nèi)容<divclass="info"><divclass="hd"><ahref="/subject/1292052/"class=""><spanclass="title">肖申克的救贖</span>...省略內(nèi)容</a><spanclass="playable">[可播放]</span></div><divclass="bd"><pclass="">導演:弗蘭克·德拉邦特FrankDarabont   主演:蒂姆·羅賓斯TimRobbins/...<br>1994 / 美國 / 犯罪劇情</p>...省略內(nèi)容</div></div>13.4實戰(zhàn)20:電影排行爬取及分析解析網(wǎng)頁soup=BeautifulSoup(html,"html.parser")info_list=soup.find_all(attrs={"class":"info"})forinfoininfo_list:title=info.find(attrs={"class":"title"})p=info.find("p",{"class":""})importrepattern=pile('<pclass="">.*?<br/>(.*?)</p>',re.S)r_list=re.findall(pattern,str(p))res=r_list[0].strip().split("\xa0")獲取頁面中所有屬性class值為info的div標簽,存入列表中。去除r_list列表中元素的換行符以及\xa0p標簽中有很多冗余,為了處理這些冗余,需要用到正則表達式。r_list:['\n1994\xa0/\xa0美國\xa0/\xa0犯罪劇情\n']['1994','/','美國','/','犯罪劇情']從每個屬性class值為info的div標簽中,提取有用的信息。13.4實戰(zhàn)20:電影排行爬取及分析存儲數(shù)據(jù)將解析網(wǎng)頁后獲得的有用數(shù)據(jù)列表轉(zhuǎn)換為字典元素形式,并存入JSON格式的文件中。13.4實戰(zhàn)20:電影排行爬取及分析importrequestsfrombs4importBeautifulSoupimportreimportjsondefget_html(url,headers):r=requests.get(url,headers=headers)html=r.textparse_html(html)defparse_html(html):movie_list=[]soup=BeautifulSoup(html,"html.parser")info_list=soup.find_all(attrs={"class":"info"})forinfoininfo_list:title=info.find(attrs={"class":"title"})p=info.find("p",{"class":""})pattern=pile('<pclass="">.*?<br/>(.*?)</p>',re.S)r_list=re.findall(pattern,str(p))res=r_list[0].strip().split("\xa0")movie_list.append((title.string,res[0],res[2],res[4]))save_html(movie_list)defsave_html(movie_list):movie_dict={}result_list=[]formovieinmovie_list:movie_dict["電影"]=movie[0]movie_dict["年份"]=movie[1]movie_dict["地區(qū)"]=movie[2]movie_dict["類型"]=movie[3]result_list.append(movie_dict.copy())withopen("movie.json","w",encoding="utf-8")asjsonfile:json.dump(result_list,jsonfile,ensure_ascii=False,indent=2)if__name__=="__main__":url="/top250"headers={"User-Agent":"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/535.1(KHTML,likeGecko)Chrome/14.0.835.163Safari/535.1"}get_html(url,headers)13.4實戰(zhàn)20:電影排行爬取及分析[{"電影":"肖申克的救贖","年份":"1994","地區(qū)":"美國","類型":"犯罪劇情"},{"電影":"霸王別姬","年份":"1993",...{"電影":"怦然心動","年份":"2010","地區(qū)":"美國","類型":"劇情喜劇愛情"}]movie.json13.4實戰(zhàn)20:電影排行爬取及分析對json文件中的有用數(shù)據(jù)進行分析importjsonwithopen("movie.json","r",encoding="utf-8")asjsonfile:movie_list=json.load(jsonfile)year_dict,region_dict,type_dict={},{},{}formovieinmovie_list:year=movie["年份"]year_dict[year]=year_dict.get(year,0)+1region_list=movie["地區(qū)"].split("")forregioninregion_list:region_dict[region]=region_dict.get(region,0)+1type_list=movie["類型"].split("")fortypeintype_list:type_dict[type]=type_dict.get(type,0)+1year_list=sorted(year_dict.items(),key=lambdax:x[0])region_list=sorted(region_dict.items(),key=lambdax:x[1],reverse=True)type_list=sorted(type_dict.items(),key=lambdax:x[1],reverse=True)print(year_list)print(region_list)print(type_list)13.4實戰(zhàn)20:電影排行爬取及分析對json文件中的有用數(shù)據(jù)進行分析[('1957',1),('1972',1),('1988',1),('1993',2),('1994',3),('1995',1),('1997',2),('1998',2),('2001',1),('2002',1),('2004',1),('2006',1),('2008',1),('2009',2),('2010',2),('2011',1),('2014',1),('2016',1)][('美國',15),('中國香港',3),('英國',3),('中國大陸',2),('法國',2),('加拿大',2),('意大利',2),('日本',2),('墨西哥',1),('澳大利亞',1),('印度',1),('瑞士',1),('德國',1),('韓國',1)][('劇情',21),('愛情',7),('喜劇',6),('犯罪',5),('冒險',5),('動畫',4),('科幻',4),('奇幻',3),('戰(zhàn)爭',2),('懸疑',2),('音樂',2),('同性',1),('動作',1),('災難',1),('歷史',1),('歌舞',1),('驚悚',1),('古裝',1),('傳記',1),('家庭',1)]13.5模塊8:openpyxl庫的使用openpyxl庫的基本介紹xlsx文件的存取xlsx文件的可視化13.5模塊8:openpyxl庫的使用13.5.1openpyxl庫的基本介紹openpyxl是一個Python的第三方庫,用于讀取/寫入Excel2010xlsx/xlsm/xltx/xltm文件。xlsx文件是MicrosoftExcel使用的開放XML電子表格文件格式的文件擴展名,xlsm是Excel中基于XML和啟用宏的文件格式,xltx是Excel中的模板文件格式,xltm是Excel中的宏模板文件格式。以下主要介紹xlsx文件的用法,包括xlsx文件的存取以及可視化操作。安裝openpyxl庫的代碼如下。pipinstallopenpyxl13.5模塊8:openpyxl庫的使用13.5.2xlsx文件的存取-寫入xlsx文件(1)創(chuàng)建一個xlsx工作簿,也就是Workbook類的對象wb。fromopenpyxlimportWorkbookwb=Workbook()(2)創(chuàng)建工作簿對象wb中的工作表ws。ws=wb.activews.title="工作表"第1個工作表用wb.active創(chuàng)建,后續(xù)的工作表通過create_sheet()方法創(chuàng)建工作表對象.create_sheet(工作表名稱)(3)向xlsx的工作表ws中寫入數(shù)據(jù)。ws.append(["姓名","年齡"])rows=[("小千",19),("小鋒",18)]forrowinrows:ws.append(row)(4)保存xlsx文件。wb.save("1.xlsx")13.5模塊8:openpyxl庫的使用13.5.2xlsx文件的存取-寫入xlsx文件將電影年份的統(tǒng)計數(shù)據(jù)存入xlsx文件中fromopenpyxlimportWorkbookyear_list=[('1957',1),('1972',1),('1988',1),('1993',2),('1994',3),('1995',1),('1997',2),('1998',2),('2001',1),('2002',1),('2004',1),('2006',1),('2008',1),('2009',2),('2010',2),('2011',1),('2014',1),('2016',1)]wb=Workbook()year_ws=wb.activeyear_ws.title=("年份統(tǒng)計")year_ws.append(["年份","個數(shù)"])forrowinyear_list:year_ws.append(row)wb.save("movie.xlsx")13.5模塊8:openpyxl庫的使用13.5.2xlsx文件的存取-讀取xlsx文件(1)將xlsx文件中的數(shù)據(jù)導入到工作簿對象wb中。fromopenpyxlimportload_workbookwb=load_workbook("1.xlsx")(2)獲取工作簿對象wb中名稱為“工作表”的工作表ws。ws=wb["工作表"](3)將名稱為“工作表”的工作表對象ws中的數(shù)據(jù)逐行讀取,并讀取出每行中的各個單元格中的值。forrowinws.rows:forcellinrow:print(cell.value,end="")print()姓名年齡小千19小鋒1813.5模塊8:openpyxl庫的使用13.5.3xlsx文件的可視化-條形圖fromopenpyxlimportload_workbookfromopenpyxl.chartimportBarChart,Referencewb=load_workbook("movie.xlsx")ws=wb["地區(qū)統(tǒng)計"]data=Reference(ws,min_col=2,min_row=2,max_row=6)cats=Reference(ws,min_col=1,min_row=2,max_row=6)chart=BarChart()chart.y_axis.title="個數(shù)"chart.x_axis.title="地區(qū)"chart.add_data(data)chart.set_categories(cats)chart.legend=Nonews.add_chart(chart,"D2")wb.save("bar.xlsx")13.5模塊8:openpyxl庫的使用13.5.3xlsx文件的可視化-折線圖fromopenpyxlimportload_workbookfromopenpyxl.chartimportLineChart,Referencewb=load_workbook("movie.xlsx")ws=wb["年份統(tǒng)計"]data=Reference(ws,min_col=2,min_row=2,max_row=19)cats=Reference(ws,min_col=1,min_row=2,max_row=19)chart=LineChart()chart.title="年份統(tǒng)計"chart.y_axis.title="個數(shù)"chart.x_axis.title="年份"chart.add_data(data)chart.set_categories(cats)chart.legend=Noneline_style=chart.series[0]line_style.smooth=Truews.add_chart(chart,"D2")wb.save("line.xlsx")13.5模塊8:openpyxl庫的使用13.5.3xlsx文件的可視化-餅狀圖fromopenpyxlimportload_workbookfromopenpyxl.chartimportPieChart,Referencewb=load_workbook("movie.xlsx")ws=wb["類型統(tǒng)計"]labels=Reference(ws,min_col=1,min_row=2,max_row=21)data=Reference

溫馨提示

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

評論

0/150

提交評論