Python程序設(shè)計(jì)基礎(chǔ)與應(yīng)用版教學(xué)課件第1213章_第1頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)與應(yīng)用版教學(xué)課件第1213章_第2頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)與應(yīng)用版教學(xué)課件第1213章_第3頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)與應(yīng)用版教學(xué)課件第1213章_第4頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)與應(yīng)用版教學(xué)課件第1213章_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第12章 tkinter編程案例112.1 tkinter簡(jiǎn)介Python標(biāo)準(zhǔn)庫(kù)tkinter是對(duì)Tcl/Tk的進(jìn)一步封裝,與tkinter.ttk和tkinter.tix共同提供了強(qiáng)大的跨平臺(tái)GUI編程的功能。作為擴(kuò)展,tkinter.ttk提供了Combobox、Progressbar和Treeview等組件,tkinter.scrolledtext提供了帶滾動(dòng)條的文本框,messagebox、commondialog、dialog、colorchooser、simpledialog、filedialog等模塊提供了各種對(duì)話框。tkinter常用組件組件名稱說(shuō)明Button按鈕Canvas

2、畫布,用于繪制直線、橢圓、多邊形等各種圖形Checkbutton復(fù)選框形式的按鈕Entry單行文本框Frame框架,可作為其他組件的容器,常用來(lái)對(duì)組件進(jìn)行分組Label標(biāo)簽,常用來(lái)顯示單行文本Listbox列表框Menu菜單Message多行文本框Radiobutton單選鈕,同一組中的單選鈕任何時(shí)刻只能有一個(gè)處于選中狀態(tài)Scrollbar滾動(dòng)條Toplevel常用來(lái)創(chuàng)建新的窗口12.1 tkinter簡(jiǎn)介tkinter開(kāi)發(fā)基本步驟:編寫通用代碼,例如數(shù)據(jù)庫(kù)操作搭建界面,放置組件,設(shè)置組件屬性,可以借助于PAGE編寫組件的事件處理代碼啟動(dòng)應(yīng)用程序,啟動(dòng)消息主循環(huán)12.1 tkinter簡(jiǎn)介12

3、.2 用戶登錄界面例12-1 tkinter實(shí)現(xiàn)用戶登錄界面。code例12_1.pyw12.3 選擇類組件應(yīng)用例12-2 tkinter單選鈕、復(fù)選框、組合框、列表框綜合運(yùn)用案例。code例12_2.pyw12.4 簡(jiǎn)單畫圖程序例12-3 使用tkinter實(shí)現(xiàn)畫圖程序。code例12_3.pyw12.5 電子時(shí)鐘例12-4 使用tkinter實(shí)現(xiàn)電子時(shí)鐘。code例12_4.pyw12.6 屏幕顏色選擇器例12-5 獲取并顯示屏幕任意位置的顏色。code例12_5.pyw例12-6 使用tkinter實(shí)現(xiàn)抽獎(jiǎng)式提問(wèn)程序。code例12_6.pyw12.7 抽獎(jiǎng)式提問(wèn)程序12.8 簡(jiǎn)易計(jì)算器

4、程序例12-7 使用tkinter實(shí)現(xiàn)計(jì)算器程序。code例12_7.pyw1112.9 定時(shí)自動(dòng)關(guān)閉的窗口例12-8 使用tkinter實(shí)現(xiàn)定時(shí)自動(dòng)關(guān)閉的窗口。code例12_8.pyw12第13章 網(wǎng)絡(luò)爬蟲入門與應(yīng)用1313.1 HTML與JavaScript基礎(chǔ)如果只是編寫爬蟲程序的話,畢竟不是開(kāi)發(fā)網(wǎng)站,所以只要能夠看懂HTML代碼基本上就可以了,不要求能編寫。當(dāng)然,對(duì)于一些高級(jí)爬蟲和特殊的網(wǎng)站,還需要具有深厚的JavaScript功底,或者JQuery、AJAX等知識(shí)。1413.1.1 HTML基礎(chǔ)(1)h標(biāo)簽在HTML代碼中,使用h1到h6表示不同級(jí)別的標(biāo)題,其中h1級(jí)別的標(biāo)題字體最

5、大,h6級(jí)別的標(biāo)題字體最小。該標(biāo)簽的用法為:一級(jí)標(biāo)題二級(jí)標(biāo)題三級(jí)標(biāo)題1513.1.1 HTML基礎(chǔ)(2)p標(biāo)簽在HTML代碼中,p標(biāo)簽表示段落,用法為:這是一個(gè)段落1613.1.1 HTML基礎(chǔ)(3)a標(biāo)簽在HTML代碼中,a標(biāo)簽表示超鏈接,使用時(shí)需要指定鏈接地址(由href屬性來(lái)指定)和在頁(yè)面上顯示的文本,用法為:點(diǎn)這里1713.1.1 HTML基礎(chǔ)(4)img標(biāo)簽在HTML代碼中,img標(biāo)簽用來(lái)顯示一個(gè)圖像,并使用src屬性指定圖像文件地址,可以使用本地文件,也可以指定網(wǎng)絡(luò)上的圖片。例如:1813.1.1 HTML基礎(chǔ)(5)table、tr、td標(biāo)簽在HTML代碼中,table標(biāo)簽用來(lái)創(chuàng)建

6、表格,tr用來(lái)創(chuàng)建行,td用來(lái)創(chuàng)建單元格,用法為: 第一行第一列 第一行第二列 第二行第一列 第二行第二列 1913.1.1 HTML基礎(chǔ)(6)ul、ol、li在HTML代碼中,ul標(biāo)簽用來(lái)創(chuàng)建無(wú)序列表,ol標(biāo)簽用來(lái)創(chuàng)建有序列表,li標(biāo)簽用來(lái)創(chuàng)建其中的列表項(xiàng)。例如,下面是ul和li標(biāo)簽的用法: 紅色 綠色 藍(lán)色2013.1.1 HTML基礎(chǔ)(7)div標(biāo)簽在HTML代碼中,div標(biāo)簽用來(lái)創(chuàng)建一個(gè)塊,其中可以包含其他標(biāo)簽,例如: 紅色 綠色 藍(lán)色 第一段 第二段2113.1.2 JavaScript基礎(chǔ)(1)在網(wǎng)頁(yè)中使用JavaScript代碼的方式可以在HTML標(biāo)簽的事件屬性中直接添加Java

7、Script代碼。例如,把下面的代碼保存為index.html文件并使用瀏覽器打開(kāi),單擊按鈕“保存”,網(wǎng)頁(yè)會(huì)彈出提示“保存成功”。 2213.1.2 JavaScript基礎(chǔ)對(duì)于較多但僅在個(gè)別網(wǎng)頁(yè)中用到的JavaScript代碼,可以寫在網(wǎng)頁(yè)中的標(biāo)簽中。例如,下面的代碼保存為index.html并使用瀏覽器打開(kāi),會(huì)發(fā)現(xiàn)頁(yè)面上顯示的是“動(dòng)態(tài)內(nèi)容”而不是“靜態(tài)內(nèi)容”。 靜態(tài)內(nèi)容 document.getElementById(test).innerHTML=動(dòng)態(tài)內(nèi)容; 2313.1.2 JavaScript基礎(chǔ)如果一個(gè)網(wǎng)站中會(huì)用到大量的JavaScript代碼,一般會(huì)把這些代碼按功能劃分到不同函數(shù)

8、中,并把這些函數(shù)封裝到一個(gè)擴(kuò)展名為js的文件中,然后在網(wǎng)頁(yè)中使用。例如,和網(wǎng)頁(yè)在同一個(gè)文件夾中的myfunctions.js內(nèi)容如下:function modify() document.getElementById(test).innerHTML=動(dòng)態(tài)內(nèi)容;在下面的頁(yè)面文件中,把外部文件myfunctions.js導(dǎo)入,然后調(diào)用了其中的函數(shù): 靜態(tài)內(nèi)容 modify();2413.1.2 JavaScript基礎(chǔ)(2)常用JavaScript事件把下面的代碼保存為index.html并使用瀏覽器打開(kāi),會(huì)發(fā)現(xiàn)在每次頁(yè)面加載時(shí)都會(huì)彈出提示,但在頁(yè)面上進(jìn)行其他操作時(shí),并不會(huì)彈出提示。 靜態(tài)內(nèi)容 2

9、513.1.2 JavaScript基礎(chǔ)除了常用的事件之外,還有一些特殊的方式可以執(zhí)行JavaScript代碼。例如,下面的代碼演示了在鏈接標(biāo)簽中使用href屬性指定JavaScript代碼的用法。 function test()alert(提示信息); 點(diǎn)這里 2613.1.2 JavaScript基礎(chǔ)(3)常用JavaScript對(duì)象下面的代碼演示了prompt()方法的用法,將其保存為文件index.html并使用瀏覽器打開(kāi),會(huì)提示用戶輸入任意內(nèi)容,然后在頁(yè)面上輸出相應(yīng)的信息。 var city = prompt(請(qǐng)輸入一個(gè)城市名稱:, 煙臺(tái)); document.write(你輸入的是

10、:+city); 2713.1.2 JavaScript基礎(chǔ)把下面的代碼保存為文件index.html,此時(shí)頁(yè)面上會(huì)顯示圖像文件1.jpg的內(nèi)容,單擊該圖像時(shí)會(huì)切換成為2.jpg的內(nèi)容。 2813.2 urllib基本應(yīng)用與爬蟲案例Python 3.x標(biāo)準(zhǔn)庫(kù)urllib提供了urllib.request、urllib.response、urllib.parse和urllib.error四個(gè)模塊,很好地支持了網(wǎng)頁(yè)內(nèi)容讀取功能。再結(jié)合Python字符串方法和正則表達(dá)式,可以完成一些簡(jiǎn)單的網(wǎng)頁(yè)內(nèi)容爬取工作,也是理解和使用其他爬蟲庫(kù)的基礎(chǔ)。2913.2.1 urllib的基本應(yīng)用1.讀取并顯示網(wǎng)頁(yè)內(nèi)容

11、 import urllib.request fp = urllib.request.urlopen(r) print(fp.read(100) #讀取100個(gè)字節(jié) print(fp.read(100).decode() #使用UTF8進(jìn)行解碼 fp.close() #關(guān)閉連接3013.2.1 urllib的基本應(yīng)用2.提交網(wǎng)頁(yè)參數(shù)(1)下面的代碼演示了如何使用GET方法讀取并顯示指定url的內(nèi)容。 import urllib.request import urllib.parse params = urllib.parse.urlencode(spam: 1, eggs: 2, bacon:

12、 0) url = /cgi-bin/query?%s % params with urllib.request.urlopen(url) as f: print(f.read().decode(utf-8)3113.2.1 urllib的基本應(yīng)用(2)下面的代碼演示了如何使用POST方法提交參數(shù)并讀取指定頁(yè)面內(nèi)容。 import urllib.request import urllib.parse data = urllib.parse.urlencode(spam: 1, eggs: 2, bacon: 0) data = data.encode(ascii) with urllib.re

13、quest.urlopen(http:/requestb.in/xrbl82xr, data) as f: print(f.read().decode(utf-8)3213.2.1 urllib的基本應(yīng)用3.使用HTTP代理訪問(wèn)頁(yè)面 import urllib.request proxies = http: :8080/ opener = urllib.request.FancyURLopener(proxies) with opener.open() as f: f.read().decode(utf-8)3313.2.2 urllib爬蟲案例例13-1 爬取公眾號(hào)文章中的圖片。第1步 確定

14、公眾號(hào)文章的地址,以微信公眾號(hào)“Python小屋”里的一篇文章為例,文章標(biāo)題為“報(bào)告PPT(163頁(yè)):基于Python語(yǔ)言的課程群建設(shè)探討與實(shí)踐”,地址為:/s?_biz=MzI4MzM2MDgyMQ=&mid=2247486249&idx=1&sn=a37d079f541b194970428fb2fd7a1ed4&chksm=eb8aa073dcfd2965f2d48c5ae9341a7f8a1c2ae2c79a68c7d2476d8573c91e1de2e237c98534&scene=21#wechat_redirect3413.2.2 urllib爬蟲案例第2步 在瀏覽器(以Chro

15、me為例)中打開(kāi)該文章,然后單擊鼠標(biāo)右鍵,選擇“查看網(wǎng)頁(yè)源代碼”,分析后發(fā)現(xiàn),公眾號(hào)文章中的圖片鏈接格式為:3513.2.2 urllib爬蟲案例第3步 根據(jù)前面的分析,確定用來(lái)提取文章中圖片鏈接的正則表達(dá)式:pattern = data-type=png data-src=(.+?)3613.2.2 urllib爬蟲案例第4步 編寫并運(yùn)行Python爬蟲程序,代碼如下:from re import findallfrom urllib.request import urlopenurl = /s?_biz=MzI4MzM2MDgyMQ=&mid=2247486249&idx=1&sn=a37

16、d079f541b194970428fb2fd7a1ed4&chksm=eb8aa073dcfd2965f2d48c5ae9341a7f8a1c2ae2c79a68c7d2476d8573c91e1de2e237c98534&scene=21#wechat_redirectwith urlopen(url) as fp: content = fp.read().decode()pattern = data-type=png data-src=(.+?)#查找所有圖片鏈接地址result = findall(pattern, content)#逐個(gè)讀取圖片數(shù)據(jù),并寫入本地文件for index,

17、 item in enumerate(result): with urlopen(str(item) as fp: with open(str(index)+.png, wb) as fp1: fp1.write(fp.read()3713.3 scrapy爬蟲案例例13-2 使用scrapy框架編寫爬蟲程序。第1步 使用pip命令安裝好scrapy之后,在命令提示符環(huán)境中執(zhí)行下面的命令創(chuàng)建一個(gè)項(xiàng)目MyCraw:scrapy startproject MyCraw3813.3 scrapy爬蟲案例第2步 然后編寫Python程序MyCrawMyCrawspidersMySpider.py,用于

18、爬取指定頁(yè)面的內(nèi)容,把網(wǎng)頁(yè)內(nèi)容和圖片分別保存為文件,MySpider.py的代碼如下:codeMySpider.py3913.3 scrapy爬蟲案例第3步 在命令提示符環(huán)境中執(zhí)行下面的命令,運(yùn)行爬蟲程序。scrapy crawl mySpider4013.3 scrapy爬蟲案例例13-3 使用scrapy框架編寫爬蟲程序,爬取天涯小說(shuō)。第1步 以天涯小說(shuō)“宜昌鬼事之大宗師”為例,首先確定第一頁(yè)的鏈接為:/post-16-1126849-1.shtml第2步 然后查看并分析網(wǎng)頁(yè)源代碼,確定作者ID,確定如何查找作者發(fā)表的帖子而過(guò)濾其他跟帖,并確定該小說(shuō)不同頁(yè)的URL之間有什么規(guī)律。4113.

19、3 scrapy爬蟲案例第3步 把這些問(wèn)題都確定之后,創(chuàng)建爬蟲項(xiàng)目。1)進(jìn)入命令提示符(cmd)環(huán)境,切換至Python安裝目錄的scripts目錄,執(zhí)行命令scrapy startproject xiaoshuo創(chuàng)建爬蟲項(xiàng)目xiaoshuo,2)進(jìn)入該目錄,編寫Python程序文件spidersspiderYichangGuishi.py,3)然后在命令提示符環(huán)境中執(zhí)行命令scrapy crawl spiderYichangGuishi,稍等片刻即可爬取小說(shuō)全文并生成記事本文檔。codespiderYichangGuishi.py4213.4 BeautifulSoup用法簡(jiǎn)介 from b

20、s4 import BeautifulSoup BeautifulSoup(hello world!, lxml) #自動(dòng)添加標(biāo)簽hello world! BeautifulSoup(hello world!, lxml) #自動(dòng)補(bǔ)全標(biāo)簽hello world!4313.4 BeautifulSoup用法簡(jiǎn)介 html_doc = The Dormouses storyThe Dormouses storyOnce upon a time there were three little sisters; and their names wereElsie,Lacie andTillie;and

21、 they lived at the bottom of a well.4413.4 BeautifulSoup用法簡(jiǎn)介 soup = BeautifulSoup(html_doc, html.parser) #也可以指定lxml或其他解析器 print(soup.prettify() #以優(yōu)雅的方式顯示出來(lái) The Dormouses story The Dormouses story Once upon a time there were three little sisters; and their names were Elsie , Lacie and Tillie ;and the

22、y lived at the bottom of a well. . 4513.4 BeautifulSoup用法簡(jiǎn)介 soup.title #訪問(wèn)標(biāo)簽的內(nèi)容The Dormouses story #查看標(biāo)簽的名字title soup.title.text #查看標(biāo)簽的文本The Dormouses story soup.title.string #查看標(biāo)簽的文本The Dormouses story soup.title.parent #查看上一級(jí)標(biāo)簽The Dormouses story soup.headThe Dormouses story soup.b #訪問(wèn)標(biāo)簽的內(nèi)容The Dor

23、mouses story soup.body.b #訪問(wèn)中標(biāo)簽的內(nèi)容The Dormouses story #把整個(gè)BeautifulSoup對(duì)象看作標(biāo)簽對(duì)象document4613.4 BeautifulSoup用法簡(jiǎn)介 soup.body #查看body標(biāo)簽內(nèi)容The Dormouses storyOnce upon a time there were three little sisters; and their names wereElsie,Lacie andTillie;and they lived at the bottom of a well.4713.4 BeautifulS

24、oup用法簡(jiǎn)介 soup.p #查看段落信息The Dormouses story soup.pclass #查看標(biāo)簽屬性title soup.p.get(class) #也可以這樣查看標(biāo)簽屬性title soup.p.text #查看段落文本The Dormouses story soup.p.contents #查看段落內(nèi)容The Dormouses story soup.aElsie soup.a.attrs #查看標(biāo)簽所有屬性class: sister, href: /elsie, id: link14813.4 BeautifulSoup用法簡(jiǎn)介 soup.find_all(a) #

25、查找所有標(biāo)簽Elsie, Lacie, Tillie soup.find_all(a, b) #同時(shí)查找和標(biāo)簽The Dormouses story, Elsie, Lacie, Tillie4913.4 BeautifulSoup用法簡(jiǎn)介 import re soup.find_all(href=pile(elsie) #查找href包含特定關(guān)鍵字的標(biāo)簽Elsie soup.find(id=link3) #查找屬性id=link3的標(biāo)簽Tillie soup.find_all(a, id=link3) #查找屬性link3的a標(biāo)簽Tillie for link in soup.find_al

26、l(a): print(link.text,:,link.get(href)Elsie : /elsieLacie : /lacieTillie : /tillie5013.4 BeautifulSoup用法簡(jiǎn)介 print(soup.get_text() #返回所有文本The Dormouses storyThe Dormouses storyOnce upon a time there were three little sisters; and their names wereElsie,Lacie andTillie;and they lived at the bottom of a

27、well. soup.aid = test_link1 #修改標(biāo)簽屬性的值 soup.aElsie soup.a.string.replace_with(test_Elsie) #修改標(biāo)簽文本Elsie soup.a.stringtest_Elsie5113.4 BeautifulSoup用法簡(jiǎn)介 for child in soup.body.children: #遍歷直接子標(biāo)簽 print(child)The Dormouses storyOnce upon a time there were three little sisters; and their names weretest_El

28、sie,Lacie andTillie;and they lived at the bottom of a well.5213.4 BeautifulSoup用法簡(jiǎn)介 test_doc = s = BeautifulSoup(test_doc, lxml) for child in s.html.children: #遍歷直接子標(biāo)簽 print(child) for child in s.html.descendants: #遍歷子孫標(biāo)簽 print(child)5313.5 requests基本操作與爬蟲案例Python擴(kuò)展庫(kù)requests可以使用比標(biāo)準(zhǔn)庫(kù)urllib更簡(jiǎn)潔的形式來(lái)處理HT

29、TP協(xié)議和解析網(wǎng)頁(yè)內(nèi)容,也是比較常用的爬蟲工具之一,完美支持Python 3.x,使用pip可以直接在線安裝。安裝成功之后,使用下面的方式導(dǎo)入這個(gè)庫(kù): import requests5413.5.1 requests基本操作(1)增加頭部并設(shè)置訪問(wèn)代理 url = /some/endpoint headers = user-agent: my-app/0.0.1 r = requests.get(url, headers=headers)5513.5.1 requests基本操作(2)訪問(wèn)網(wǎng)頁(yè)并提交數(shù)據(jù) payload = key1: value1, key2: value2 r = requ

30、ests.post(/post, data=payload) print(r.text) #查看網(wǎng)頁(yè)信息,略去輸出結(jié)果 url = /some/endpoint payload = some: data r = requests.post(url, json=payload) print(r.text) #查看網(wǎng)頁(yè)信息,略去輸出結(jié)果 print(r.headers) #查看頭部信息,略去輸出結(jié)果 print(r.headersContent-Type)application/json; charset=utf-8 print(r.headersContent-Encoding)gzip5613

31、.5.1 requests基本操作(3)獲取和設(shè)置cookies下面的代碼演示了使用get()方法獲取網(wǎng)頁(yè)信息時(shí)cookies屬性的用法: r = requests.get(/) r.cookies #查看cookies5713.5.1 requests基本操作下面的代碼演示了使用get()方法獲取網(wǎng)頁(yè)信息時(shí)設(shè)置cookies參數(shù)的用法: url = /cookies cookies = dict(cookies_are=working) r = requests.get(url, cookies=cookies) #設(shè)置cookies print(r.text) cookies: cooki

32、es_are: working 5813.5.2 requests爬蟲案例例13-4 使用requests庫(kù)爬取微信公眾號(hào)“Python小屋”文章“Python使用集合實(shí)現(xiàn)素?cái)?shù)篩選法”中的所有超鏈接。5913.5.2 requests爬蟲案例 import requests url = /s?_biz=MzI4MzM2MDgyMQ=&mid=2247486531&idx=1&sn=7eeb27a03e2ee8ab4152563bb110f248&chksm=eb8aa719dcfd2e0f7b1731cfd8aa74114d68facf1809d7cdb0601e3d3be8fb287cfc035002c6#rd r = requests.get(url) r.status_code #響應(yīng)狀態(tài)碼200 r.text:300 #查看網(wǎng)頁(yè)源代碼前300個(gè)字符n!-headTrap-n n nn 篩選法 in r.text #測(cè)試網(wǎng)頁(yè)源代碼中是否包含字符串篩選法True r.encoding #查看網(wǎng)頁(yè)編碼格式UTF-86013.5.2 requests爬蟲案例 links = re

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論