Python程序設(shè)計(jì)基礎(chǔ)(微課版)-教案 第13周 第8章8.5 網(wǎng)頁數(shù)據(jù)爬取、第9章9.1-9.2 面向?qū)ο蠡A(chǔ)(9.1 面向?qū)ο蟾拍睢?.2 類和對(duì)象)_第1頁
Python程序設(shè)計(jì)基礎(chǔ)(微課版)-教案 第13周 第8章8.5 網(wǎng)頁數(shù)據(jù)爬取、第9章9.1-9.2 面向?qū)ο蠡A(chǔ)(9.1 面向?qū)ο蟾拍睢?.2 類和對(duì)象)_第2頁
Python程序設(shè)計(jì)基礎(chǔ)(微課版)-教案 第13周 第8章8.5 網(wǎng)頁數(shù)據(jù)爬取、第9章9.1-9.2 面向?qū)ο蠡A(chǔ)(9.1 面向?qū)ο蟾拍睢?.2 類和對(duì)象)_第3頁
Python程序設(shè)計(jì)基礎(chǔ)(微課版)-教案 第13周 第8章8.5 網(wǎng)頁數(shù)據(jù)爬取、第9章9.1-9.2 面向?qū)ο蠡A(chǔ)(9.1 面向?qū)ο蟾拍睢?.2 類和對(duì)象)_第4頁
Python程序設(shè)計(jì)基礎(chǔ)(微課版)-教案 第13周 第8章8.5 網(wǎng)頁數(shù)據(jù)爬取、第9章9.1-9.2 面向?qū)ο蠡A(chǔ)(9.1 面向?qū)ο蟾拍睢?.2 類和對(duì)象)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第十三周:理論課13(2課時(shí)/90分鐘)一、授課基本信息授課章節(jié)第8章8.5網(wǎng)頁數(shù)據(jù)爬取、第9章9.1-9.2面向?qū)ο蠡A(chǔ)(9.1面向?qū)ο蟾拍睢?.2類和對(duì)象)授課時(shí)長2課時(shí)(90分鐘)授課對(duì)象計(jì)算機(jī)類相關(guān)專業(yè)本科一年級(jí)(已掌握文件讀寫、Pandas數(shù)據(jù)處理,參考第8章1-4節(jié);具備基礎(chǔ)HTTP認(rèn)知和邏輯思維,能編寫模塊化程序)先修知識(shí)文件讀寫(with語句)、第三方庫安裝(pip)、HTML基礎(chǔ)標(biāo)簽(<a>/<div>)、函數(shù)與模塊(自定義函數(shù)、模塊導(dǎo)入)對(duì)應(yīng)教材內(nèi)容第8章8.5節(jié)核心小節(jié):

8.5.1爬蟲原理(工作流程、robots協(xié)議)、8.5.2爬取技術(shù)(requests庫發(fā)送請求、response屬性)、8.5.3解析技術(shù)(BeautifulSoup創(chuàng)建對(duì)象、搜索/訪問節(jié)點(diǎn),例8-17/8-18);

第9章9.1-9.2節(jié)核心小節(jié):

9.1面向?qū)ο蟾拍睿?.1.1面向過程vs面向?qū)ο蟆?.1.2基本名詞:類/對(duì)象/實(shí)例化、9.1.3三大特征:封裝/繼承/多態(tài));

9.2類和對(duì)象(9.2.1類的定義:class關(guān)鍵字、構(gòu)造方法__init__、self參數(shù);9.2.2對(duì)象創(chuàng)建與使用:實(shí)例化、訪問屬性/方法,例9-1/9-2/9-3)二、教學(xué)目標(biāo)1.知識(shí)目標(biāo)掌握網(wǎng)頁數(shù)據(jù)爬取核心:爬蟲原理:工作流程(種子URL→待抓取隊(duì)列→下載→解析→重復(fù))、robots協(xié)議(合規(guī)爬?。?;requests庫:發(fā)送GET請求(requests.get())、response屬性(status_code/text/encoding)、headers偽裝瀏覽器(解決418錯(cuò)誤);BeautifulSoup庫:創(chuàng)建解析對(duì)象(BeautifulSoup(text,'html.parser'))、搜索節(jié)點(diǎn)(find()/find_all()按標(biāo)簽/屬性)、訪問節(jié)點(diǎn)(name/attrs/text);掌握面向?qū)ο蠡A(chǔ):核心概念:類(抽象模板)、對(duì)象(類的實(shí)例)、實(shí)例化(類→對(duì)象)、封裝(屬性+方法封裝為類);類的定義:class關(guān)鍵字、類體(屬性定義、方法定義)、構(gòu)造方法__init__(self,...)(初始化對(duì)象屬性)、self參數(shù)(綁定實(shí)例對(duì)象);對(duì)象操作:創(chuàng)建對(duì)象(對(duì)象名=類名(參數(shù)))、訪問屬性(對(duì)象名.屬性)、調(diào)用方法(對(duì)象名.方法())、私有屬性(__屬性名,類內(nèi)可訪問,類外不可直接訪問)。2.能力目標(biāo)能獨(dú)立編寫簡單網(wǎng)頁爬蟲:用requests爬取網(wǎng)頁內(nèi)容(如百度首頁、豆瓣電影列表),處理編碼與狀態(tài)碼;用BeautifulSoup解析HTML,提取指定節(jié)點(diǎn)數(shù)據(jù)(如網(wǎng)頁標(biāo)題、導(dǎo)航欄鏈接,參考例8-18);能獨(dú)立定義類與創(chuàng)建對(duì)象:定義包含屬性和方法的類(如Person類含name/age屬性、run()方法);創(chuàng)建對(duì)象并調(diào)用方法(如p=Person("李明",18),p.run()),處理私有屬性(通過類內(nèi)方法訪問__age);能排查常見錯(cuò)誤:爬蟲:requests無headers報(bào)418、BeautifulSoup解析節(jié)點(diǎn)找不到(檢查標(biāo)簽/屬性名);面向?qū)ο螅篲_init__參數(shù)遺漏、self參數(shù)缺失、私有屬性直接訪問報(bào)錯(cuò)。3.素養(yǎng)目標(biāo)培養(yǎng)合規(guī)數(shù)據(jù)獲取意識(shí):理解robots協(xié)議,不爬取禁止訪問的網(wǎng)頁,保護(hù)網(wǎng)絡(luò)數(shù)據(jù)安全;建立面向?qū)ο笏季S:從“按步驟寫代碼”(面向過程)過渡到“按對(duì)象組織代碼”(面向?qū)ο螅?,為?fù)雜程序開發(fā)奠定基礎(chǔ);提升模塊化與封裝意識(shí):通過類封裝屬性與方法,減少代碼冗余,提高可維護(hù)性。三、教學(xué)重難點(diǎn)教學(xué)重點(diǎn)1.網(wǎng)頁爬取核心流程:requests發(fā)送請求→BeautifulSoup解析→提取數(shù)據(jù);

2.requests庫關(guān)鍵操作:get()參數(shù)(url/headers)、response屬性使用;

3.類的核心語法:class定義、__init__構(gòu)造方法、self參數(shù)作用;

4.對(duì)象的基本操作:實(shí)例化、訪問屬性、調(diào)用方法教學(xué)難點(diǎn)1.網(wǎng)頁爬?。?/p>

-headers偽裝(理解User-Agent作用,正確設(shè)置請求頭);

-BeautifulSoup節(jié)點(diǎn)定位(多層標(biāo)簽嵌套時(shí),精準(zhǔn)匹配屬性/標(biāo)簽);

2.面向?qū)ο螅?/p>

-self參數(shù)的本質(zhì)(綁定實(shí)例對(duì)象,調(diào)用時(shí)自動(dòng)傳遞,無需手動(dòng)傳參);

-__init__構(gòu)造方法的作用(實(shí)例化時(shí)自動(dòng)執(zhí)行,初始化屬性,區(qū)別于普通方法);

-私有屬性的訪問規(guī)則(類內(nèi)通過self訪問,類外需通過公有方法間接訪問)四、教學(xué)方法與手段教學(xué)方法:案例演示法:實(shí)時(shí)運(yùn)行教材核心例子(例8-17爬百度、例8-18解析百度導(dǎo)航欄、例9-1定義Person類),分步展示“代碼→運(yùn)行結(jié)果→原理講解”(如requests爬取后打印網(wǎng)頁源碼、BeautifulSoup提取鏈接、類實(shí)例化后調(diào)用方法);對(duì)比教學(xué)法:對(duì)比“面向過程vs面向?qū)ο蟆保ㄈ纭坝?jì)算2個(gè)人的年齡”:過程式用函數(shù),面向?qū)ο笥妙悾?、?duì)比“requests直接爬取vs加headers爬取”(解決418錯(cuò)誤);問題驅(qū)動(dòng)法:通過“為什么直接爬豆瓣會(huì)報(bào)418?”“self參數(shù)為什么必須寫?”“類和對(duì)象的關(guān)系是什么?”引導(dǎo)學(xué)生思考;實(shí)操指導(dǎo)法:課堂練習(xí)時(shí),針對(duì)“爬蟲節(jié)點(diǎn)找不到”“self遺漏報(bào)錯(cuò)”,實(shí)時(shí)演示修正(如檢查HTML標(biāo)簽名、補(bǔ)充self參數(shù))。教學(xué)手段:多媒體課件:含教材8.5/9.1-9.2節(jié)的核心表格(requests響應(yīng)屬性表、BeautifulSoup節(jié)點(diǎn)方法表、面向?qū)ο竺~對(duì)照表)、案例代碼與運(yùn)行結(jié)果(如爬蟲提取的鏈接列表、類實(shí)例化輸出)、易錯(cuò)點(diǎn)截圖(418錯(cuò)誤、self缺失報(bào)錯(cuò));演示代碼包:spider_baidu.py(爬百度導(dǎo)航欄)、class_person.py(Person類示例);實(shí)物演示:瀏覽器“檢查”功能查看HTML源碼(如百度首頁的<a>標(biāo)簽)、PyCharm中類的定義與對(duì)象調(diào)用過程。五、教學(xué)準(zhǔn)備1.教師準(zhǔn)備課件:整理教材8.5/9.1-9.2節(jié)的典型案例(例8-17至例9-3),標(biāo)注關(guān)鍵參數(shù)(如requests.get()的headers、__init__的self);演示環(huán)境:爬蟲環(huán)境:已安裝requests(pipinstallrequests)、beautifulsoup4(pipinstallbeautifulsoup4)、lxml(pipinstalllxml);面向?qū)ο蟓h(huán)境:PyCharm已創(chuàng)建“第十三周爬蟲與面向?qū)ο蟆表?xiàng)目,測試Person類代碼無報(bào)錯(cuò);課堂練習(xí)題:設(shè)計(jì)2道基礎(chǔ)題(爬蟲提取網(wǎng)頁標(biāo)題、定義Student類);教具:HTML標(biāo)簽結(jié)構(gòu)示意圖(展示<a>/<div>嵌套)、類與對(duì)象關(guān)系圖(類是模板,對(duì)象是實(shí)例)。2.學(xué)生準(zhǔn)備預(yù)習(xí)教材第8章8.5節(jié)、第9章9.1-9.2節(jié),標(biāo)記疑問(如“headers怎么獲???”“self是什么?”);提前安裝所需庫:pipinstallrequestsbeautifulsoup4lxml;啟動(dòng)瀏覽器,練習(xí)“檢查”功能(F12)查看網(wǎng)頁源碼(如百度首頁的HTML結(jié)構(gòu));復(fù)習(xí)函數(shù)定義與調(diào)用(為理解類的方法鋪墊)。六、教學(xué)過程(總90分鐘)1.導(dǎo)入(5分鐘)問題導(dǎo)入:“想獲取豆瓣電影Top250的所有電影名稱,手動(dòng)復(fù)制太麻煩,怎么用代碼自動(dòng)獲?。俊保ㄒ鼍W(wǎng)頁爬?。?;“用函數(shù)寫‘學(xué)生成績管理’,需要重復(fù)傳姓名/成績參數(shù),有沒有更簡潔的方式?”(引出面向?qū)ο螅?。案例演示?/p>

快速運(yùn)行兩段對(duì)比代碼,展示面向過程與面向?qū)ο蟮牟町悾?面向過程:計(jì)算學(xué)生年齡

defget_age(name,age):

print(f"{name}的年齡是{age}")

get_age("李明",18)

get_age("張華",19)

#面向?qū)ο螅篜erson類

classPerson:

def__init__(self,name,age):

=name

self.age=age

defshow_age(self):

print(f"{}的年齡是{self.age}")

p1=Person("李明",18)

p1.show_age()引導(dǎo)學(xué)生關(guān)注“面向?qū)ο笾恍瓒x一次類,可創(chuàng)建多個(gè)對(duì)象”,切入本節(jié)課主題——網(wǎng)頁爬取與面向?qū)ο蟆?.新課講授(60分鐘)模塊1:網(wǎng)頁數(shù)據(jù)爬?。?0分鐘,教材8.5)爬蟲原理與requests庫:#例8-17簡化:爬百度首頁

importrequests

#1.發(fā)送GET請求(加headers偽裝瀏覽器,避免418)

headers={

"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/Safari/537.36"

}

res=requests.get("",headers=headers)

#2.處理響應(yīng)

print("狀態(tài)碼:",res.status_code)#200表示成功

res.encoding="utf-8"#設(shè)置編碼,解決中文亂碼

html_text=res.text#獲取網(wǎng)頁HTML文本

print("網(wǎng)頁標(biāo)題標(biāo)簽:",html_text[:500])#打印前500字符,查看是否包含<title>講解:狀態(tài)碼(200成功、404找不到、418反爬)、headers的作用(模擬瀏覽器,避免被識(shí)別為爬蟲)。BeautifulSoup解析HTML(例8-18簡化:提取百度導(dǎo)航欄鏈接):frombs4importBeautifulSoup

#1.創(chuàng)建解析對(duì)象

soup=BeautifulSoup(html_text,"html.parser")#解析器用html.parser

#2.搜索節(jié)點(diǎn):找所有class="mnav"的<a>標(biāo)簽(導(dǎo)航欄鏈接)

a_tags=soup.find_all("a",attrs={"class":"mnav"})

#3.訪問節(jié)點(diǎn):提取文本和鏈接

print("百度導(dǎo)航欄:")

fortagina_tags:

text=tag.text#節(jié)點(diǎn)文本(如“新聞”)

href=tag.attrs["href"]#節(jié)點(diǎn)屬性(鏈接地址)

print(f"{text}:{href}")講解:find_all(name,attrs)(按標(biāo)簽名+屬性搜索)、tag.text(獲取文本)、tag.attrs(獲取屬性字典)。爬蟲流程總結(jié):

發(fā)送請求(requests)→獲取響應(yīng)(text/encoding)→解析HTML(BeautifulSoup)→提取數(shù)據(jù)(find/find_all)→保存數(shù)據(jù)(文件/Excel)。模塊2:面向?qū)ο蠡A(chǔ)(30分鐘,教材9.1-9.2)類的定義與構(gòu)造方法(例9-1簡化):#定義Person類

classPerson:

#類屬性(所有對(duì)象共享)

species="人類"

#構(gòu)造方法:實(shí)例化時(shí)自動(dòng)執(zhí)行,初始化實(shí)例屬性

def__init__(self,name,age):

=name#實(shí)例屬性(每個(gè)對(duì)象獨(dú)有)

self.__age=age#私有屬性(類外不可直接訪問)

#實(shí)例方法:需self參數(shù)

defrun(self):

print(f"{}在跑步")

#訪問私有屬性的公有方法

defget_age(self):

returnself.__age

#例9-2簡化:私有屬性訪問

p=Person("李明",18)

print()#訪問公有屬性:李明

#print(p.__age)#報(bào)錯(cuò):類外不可直接訪問私有屬性

print(p.get_age())#通過公有方法訪問:18

print(Person.species)#訪問類屬性:人類

p.run()#調(diào)用實(shí)例方法:李明在跑步講解:self:綁定實(shí)例對(duì)象,調(diào)用方法時(shí)自動(dòng)傳遞,無需手動(dòng)傳參;__init__:初始化對(duì)象屬性,參數(shù)與實(shí)例屬性一一對(duì)應(yīng);私有屬性:__屬性名,類內(nèi)通過self訪問,類外需通過公有方法(如get_age())間接訪問。對(duì)象的創(chuàng)建與使用(例9-3簡化):#定義Address類(含類屬性)

classAddress:

city="北京"#類屬性(所有對(duì)象共享)

def__init__(self,street):

self.street=street#實(shí)例屬性

defshow_addr(self):

print(f"城市:{Address.city},街道:{self.street}")

#創(chuàng)建對(duì)象

addr1=Address("中關(guān)村大街")

addr1.show_addr()#輸出:城市:北京,街道:中關(guān)村大街

#修改類屬性(所有對(duì)象共享修改)

Address.city="上海"

addr2=Address("南京路")

addr2.show_addr()#輸出:城市:上海,街道:南京路

addr1.show_addr()#輸出:城市:上海,街道:中關(guān)村大街(類屬性修改影響所有對(duì)象)對(duì)比:類屬性(類名.屬性,所有對(duì)象共享)vs實(shí)例屬性(對(duì)象名.屬性,每個(gè)對(duì)象獨(dú)有)。3.課堂練習(xí)(15分鐘)必做任務(wù)(12分鐘,貼合教材):網(wǎng)頁爬?。壕帉憇pider_douban.py,用requests爬取豆瓣首頁(),加headers避免418,用BeautifulSoup提取網(wǎng)頁標(biāo)題(<title>標(biāo)簽文本)并輸出;面向?qū)ο螅壕帉慶lass_student.py,定義Student類,含name/student_id屬性、study()方法(打印“XX在學(xué)習(xí)”)、私有屬性__score,公有方法set_score(score)(設(shè)置分?jǐn)?shù))和get_score()(獲取分?jǐn)?shù)),創(chuàng)建對(duì)象并測試。選做任務(wù)(3分鐘):

用BeautifulSoup提取豆瓣首頁中所有<a>標(biāo)簽的href屬性,篩選包含“movie”的鏈接并輸出(電影相關(guān)鏈接)。教師巡視指導(dǎo),重點(diǎn)解決:爬蟲:headers格式錯(cuò)誤(如引號(hào)缺失)、BeautifulSoup解析器未安裝(提示pipinstalllxml);面向?qū)ο螅篲_init__參數(shù)個(gè)數(shù)不匹配(如創(chuàng)建對(duì)象時(shí)少傳參數(shù))、私有屬性直接訪問報(bào)錯(cuò)(引導(dǎo)用公有方法)。4.課堂小結(jié)(5分鐘)核心知識(shí)點(diǎn)梳理:網(wǎng)頁爬?。簉equests發(fā)請求(加headers)、BeautifulSoup解析(find/find_all)、合規(guī)爬取(robots協(xié)議);面向?qū)ο螅侯悾╟lass+__init__+方法)、對(duì)象(實(shí)例化)、屬性(公有/私有/類屬性)、方法(self參數(shù))。易錯(cuò)點(diǎn)強(qiáng)調(diào):爬蟲:無headers報(bào)418(必須設(shè)置User-Agent)、HTML標(biāo)簽屬性大小寫敏感(如class不是Class);面向?qū)ο螅篲_init__必須有self參數(shù)、類屬性用類名.屬性訪問、私有屬性不可類外直接訪問。5.作業(yè)布置(5分鐘)基礎(chǔ)作業(yè)(貼合教材習(xí)題):網(wǎng)頁爬?。簠⒖祭?-18,爬取學(xué)校官網(wǎng)首頁,提取所有導(dǎo)航欄鏈接(<a>標(biāo)簽+指定class),保存到school_links.txt;面向?qū)ο螅憾xCircle類,含radius屬性、calc_area()(計(jì)算面積πr2)和calc_circum()(計(jì)算周長2πr)方法,創(chuàng)建半徑為5的對(duì)象,輸出面積和周長(保留1位小數(shù));拓展:修改Circle類,將π設(shè)為類屬性(pi=3.14),所有對(duì)象共享。拓展作業(yè):

用requests+BeautifulSoup爬取“豆瓣電影Top250”第一頁(/top250?start=0),提取前10部電影名稱并輸出。七、板書設(shè)計(jì)第十三周:網(wǎng)頁爬取與面向?qū)ο蠡A(chǔ)

一、網(wǎng)頁數(shù)據(jù)爬取二、面向?qū)ο蠡A(chǔ)三、核心對(duì)比

1.爬蟲原理:1.核心概念:1.類屬性vs實(shí)例屬性:

-流程:種子URL→下載→解析-類:抽象模板(class)-類屬性:類名.屬性,共享

-robots協(xié)議:合規(guī)爬取-對(duì)象:類的實(shí)例(實(shí)例化)-實(shí)例屬性:對(duì)象名.屬性,獨(dú)有

2.requests庫:-封裝:屬性+方法

溫馨提示

  • 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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論