Python程序設計實踐 教案 實驗16 網絡爬蟲入門_第1頁
Python程序設計實踐 教案 實驗16 網絡爬蟲入門_第2頁
Python程序設計實踐 教案 實驗16 網絡爬蟲入門_第3頁
Python程序設計實踐 教案 實驗16 網絡爬蟲入門_第4頁
Python程序設計實踐 教案 實驗16 網絡爬蟲入門_第5頁
已閱讀5頁,還剩5頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《Python程序設計實踐教程》課程教案課題:網絡爬蟲入門教學目的:在“網絡爬蟲入門:獲取網絡信息(requests庫、BeautifulSoup庫)”的學習中,教學目的聚焦于知識、技能、思維與素養多個維度。在知識層面:讓學生深度理解網絡爬蟲的基本原理,明晰其在網絡數據獲取中的運作機制;系統掌握requests庫發送HTTP請求的各類方法,包括不同請求方式的特點與適用場景,以及BeautifulSoup庫對網頁內容進行解析的核心概念與技術。技能培養上:學生要熟練運用requests庫構建請求,能夠根據網頁結構與需求,靈活設置請求頭、參數等,成功獲取網頁源代碼;精準使用BeautifulSoup庫定位、篩選與提取網頁中的特定數據,如文本信息、鏈接地址、圖片路徑等,形成獨立完成簡單網頁數據爬取任務的實操能力。思維拓展方面:引導學生在面對不同結構網頁時,學會分析網頁布局,制定合理的數據提取策略,培養邏輯思維與問題解決能力;在處理反爬機制時,激發創新思維,探索繞過限制的有效方法。素養塑造上:強調網絡爬蟲需遵循法律法規與道德規范,培養學生的法律意識與道德操守,確保在合法合規的框架內開展數據獲取活動。課型:新授課課時:本章安排2個課時。教學重點:重點:1.了解獲取網絡信息的基本方法。2.熟悉requests庫的使用方法。3.了解BeautifulSoup庫的基本操作。4.學會簡單的爬蟲及解析網頁的方法。教學難點:難點:教學難點在于讓學生精準把握requests庫請求參數的設置以應對各類網頁反爬機制,同時熟練運用BeautifulSoup庫復雜的解析方法,從結構多變的網頁中準確提取目標數據。教學過程:教學形式:講授課,教學組織采用課堂整體講授和分組演示。教學媒體:采用啟發式教學、案例教學等教學方法。教學手段采用多媒體課件、視頻等媒體技術。板書設計:本課標題網絡爬蟲入門課次0.5授課方式理論課□討論課□習題課□其他□課時安排2學分共2分授課對象普通高等院校學生任課教師教材及參考資料1.《Python程序設計實踐教程》。2.本教材配套視頻教程及學習檢查等資源。3.與本課程相關的其他資源。教學基本內容教學方法及教學手段課程引入同學們,當你在電商平臺選購商品,是不是常糾結同款商品哪家更實惠?此時,若能一鍵獲取各大平臺的價格、銷量和用戶評價,選購就會輕松很多。這背后,靠的正是網絡爬蟲技術。在當今數據驅動的時代,企業需要分析競品信息、挖掘用戶需求,媒體要追蹤熱點輿情,都離不開大量網絡數據的支撐。就拿熱門綜藝來說,節目制作方想了解觀眾反饋,靠人工瀏覽評論效率極低,而網絡爬蟲能迅速抓取各大平臺的評論數據。今天,我們將學習使用requests庫和BeautifulSoup庫開啟網絡爬蟲之旅。requests庫能像瀏覽器一樣向網頁服務器發送請求,獲取網頁內容;BeautifulSoup庫則負責將復雜的網頁結構梳理清晰,幫我們精準提取所需信息。讓我們一起探索,掌握這一高效獲取網絡信息的技能。參考以下形式:1.銜接導入2.懸念導入3.情景導入4.激疑導入5.演示導入6.實例導入7.其他形式實驗16網絡爬蟲入門一、實驗目的1.了解獲取網絡信息的基本方法。2.熟悉?requests?庫的使用方法。3.了解?BeautifulSoup?庫的基本操作。4.學會簡單的爬蟲及解析網頁的方法。二、知識要點1.獲取網絡信息網絡爬蟲(WebCrawler)又稱為網頁蜘蛛、網絡機器人,是一種按照一定規則自動爬取網絡信息的程序或腳本。目前,網絡爬蟲抓取與解析的主要是特定網站中的數據。爬取網頁的流程如下。①選取一些網頁,將這些網頁的鏈接地址作為種子?URL。②將種子?URL?放入待抓取?URL?隊列中。③爬蟲從待抓取?URL?隊列(隊列先進先出)中依次讀取?URL,并通過?DNS?解析?URL,把鏈接地址轉換為網站服務器對應的?IP?地址。④將③中生成的?IP?地址和網頁相對路徑傳輸給網頁下載器。⑤網頁下載器將相應網頁的內容下載到本地。⑥將⑤中下載的網頁內容存儲在頁面模塊中,等待建立索引以及進行后續處理。與此同時,將已下載的網頁?URL?放入已抓取?URL?隊列中,避免重復抓取網頁。⑦從已下載的網頁內容中抽取出所有鏈接,檢查其是否已被抓取,若未被抓取,則將這個?URL?放入待抓取?URL?隊列中。⑧重復②~⑦,直到待抓取?URL?隊列為空。2.requests?庫requests?庫提供了比標準庫?urllib?更簡潔的網頁內容讀取功能,是常見的網絡爬蟲工具之一。requests?庫提供了?7?個主要方法。request()方法是基礎方法,get()、head()、post()、put()、patch()、delete()等方法均由其構造而成,如表?16-1?所示。表?16-1requests?庫的?7?個主要方法方法說明requests.request()構造一個請求,支撐其他方法requests.get()獲取?HTML?網頁requests.head()獲取?HTML?頭部信息requests.post()向?HTML?網頁提交?post?請求requests.put()向?HTML?網頁提交?put?請求requests.patch()向?HTML?網頁提交局部修改請求requests.delete()向?HTML?網頁提交刪除請求通過?requests?庫請求指定服務器的?URL,請求成功后返回一個?Response?對象。Response?對象的屬性如表?16-2?所示。表?16-2Response?對象的屬性屬性說明status_codeHTTP?請求的返回狀態,200?表示連接成功,404?表示失敗textHTTP?響應內容的字符串形式,即?URL?對應的頁面內容encoding從?HTTP?請求頭中猜測的響應內容編碼方式apparent_encoding從內容中分析出的響應編碼方式(備選編碼方式)contentHTTP?響應內容的二進制數形式使用?requests?庫抓取目標網頁的步驟如下。(1)安裝及導入?requests?庫在?Windows?操作系統中安裝?requests?庫的代碼如下。pipinstallrequests導入?requests?庫的代碼如下。importrequests(2)使用?requests?庫網絡爬蟲主要使用?requests?庫的?get()方法,語法格式如下。requests.get(url,params=None,**kwargs)(3)Robots?協議Robots?協議是網絡爬蟲協議,主要用于指導網絡爬蟲的爬取規則,即哪些頁面可以爬取,哪些頁面不能爬取。3.BeautifulSoup?庫BeautifulSoup4(簡稱?bs4)是一個?HTML/XML?解析器,主要功能是解析和提取?HTML/XML?數據,它支持?CSS?選擇器、Python?標準庫中的?HTML?解析器、lxml?庫中的?XML?解析器。BeautifulSoup?庫可以將復雜的?HTML?文檔轉換成樹結構,樹結構中的每個節點都是一個?Python?對象。(1)安裝及導入?BeautifulSoup?庫在?Windows?操作系統中安裝?BeautifulSoup?庫的代碼如下。pipinstallBeautifulSoup4導入?BeautifulSoup?庫的代碼如下。frombs4importBeautifulSoup(2)BeautifulSoup?庫的使用BeautifulSoup?庫的對象如表?16-3?所示。表?16-3BeautifulSoup?庫的對象對象說明Tag標簽,最基本的信息組織單元;有兩個非常重要的屬性,分別是表示標簽名字的?name?屬性和表示標簽屬性的?attrs?屬性NavigableString表示?HTML?中標簽的文本(非屬性字符串)BeautifulSoup表示?HTMLDOM?中的全部內容Comment表示標簽內字符串的注釋部分,是一種特殊的?NavigableString?對象BeautifulSoup?庫常用的屬性和方法如表?16-4?所示(設對象名為“beautsoup”)。表?16-4BeautifulSoup?庫常用的屬性和方法屬性和方法說明范例title獲取?HTML?的標簽<title>beautsoup.titletext獲取?HTML?標簽所返回的網頁內容beautsoup.textfind()返回第一個符合條件的?HTML?標簽;返回值是字符串,如果找不到則返回“None”beautsoup.find('head')find_all()返回符合條件的?HTML?標簽;返回值是字符串beautsoup.find_all('a')select()返回指定的?CSS?選擇器的?id?名稱、class?名稱或標簽名稱;返回值是一種列表數據類型;id?名稱前要加上“#”,class?名稱前要加上“.”beautsoup.select('#id?名稱')beautsoup.select('.class?名稱')beautsoup.select('標簽名稱')三、實例解析【實例?16-1】獲取百度首頁的基本信息(1)問題分析網絡爬蟲和信息提取是?requests?庫的基本功能,通過?url?參數將頁面地址傳遞給?get()方法,該方法返回的是一個?Response?對象。Response?對象包含一系列非常有用的屬性,通過讀取這些屬性的值能夠獲得所需要的信息。(2)程序代碼#sl16-1.pyimportrequests #導入?requests?庫r=requests.get(url='') #用?get()方法獲取源碼print(r.status_code) #輸出返回的狀態代碼r.encoding='utf-8' #設定編碼格式為?UTF-8print(r.text) #輸出網頁內容程序運行結果如下。200(信息文字省略)(3)思考與討論與瀏覽器的交互過程一樣,requests.get()代表請求過程,它返回的?Response?對象代表響應。【實例?16-2】下載《紅樓夢》獲取《紅樓夢》的回目名稱并下載全文。(1)問題分析①搜索頁面。從網絡上獲取《紅樓夢》的回目名稱,假設要爬取的網址為http://www.A.com/hlm/。②解析網頁。用?BeautifulSoup

庫(也可以用正則表達式)找到各回目的鏈接,取出每個鏈接頁面的文本,將所有文本寫入同一個文件中。(2)程序代碼#sl16-2.py#coding:utf-8"""下載紅樓夢全文"""importrequestsfrombs4importBeautifulSoup #導入?BeautifulSoup?庫importreimporttimedefget_html(url):'''得到網頁內容,使用?requests'''r=requests.get(url)r.encoding="gb18030" #這個網站用的是?gb18030?編碼returnr.textdefget_links(html):soup=BeautifulSoup(html,'html.parser') #將?BeautifulSoup?庫的?html.parser?作為源碼的解析器,并將解析的對象設定給變量?souptable=soup.find('table',{'cellpadding':"3"})print(links)returnlinksdefextract_text(html):'''得到子頁面中的文本,使用?bs4'''soup=BeautifulSoup(html,'html.parser') #得到?soup?對象title=soup.title.text #標題text=soup.table.font.text #正文return"\n"+title+"\n"+texturl=http://www.A.com/hlm/ #將網址賦給變量?url,得到目錄頁html=get_html(url)links=get_links(html) #從目錄頁中找到子頁的鏈接并下載file=open("dream.txt","w",encoding="utf-8")forlinkinlinks:title=link.text.replace('\u3000','') #取得回目名稱href=url+link['href'] #注意換成絕對網址print(href,title)sub_html=get_html(href)text=extract_text(sub_html)file.write(text)time.sleep(1)file.close()(3)運行結果http://www.A.com/hlm/001.htm甄士隱夢幻識通靈賈雨村風塵懷閨秀http://www.A.com/hlm/002.htm賈夫人仙逝揚州城冷子興演說榮國府http://www.A.com/hlm/003.htm托內兄如海薦西賓接外孫賈母惜孤女http://www.A.com/hlm/004.htm薄命女偏逢薄命郎葫蘆僧亂判葫蘆案http://www.A.com/hlm/005.htm賈寶玉神游太虛境警幻仙曲演紅樓夢http://www.A.com/hlm/006.htm賈寶玉初試云雨情劉姥姥一進榮國府http://www.A.com/hlm/007.htm送宮花賈璉戲熙鳳宴寧府寶玉會秦鐘…【實例?16-3】獲取中國大學排名編寫獲取中國大學排名的爬蟲實例,采用?requests?庫和?BeautifulSoup?庫。(1)問題分析使用?BeautifulSoup?庫來解析網頁表格中的內容,由于表格(table)中有多行(tr),而每行中有多個單元格(td),因此采用雙重循環。all_univ?是學校信息的列表,假設要爬取的網址是https://www.A.cn/rankings/bcur/2022。(2)程序代碼#sl16-3.py#coding:utf-8"""爬取大學排名"""importrequests #導入?requests?庫frombs4importBeautifulSoup #導入?BeautifulSoup?庫all_univ=[] #學校信息的列表defget_html(url):"""得到網頁內容"""try:r=requests.get(url,timeout=10)r.encoding="utf-8"returnr.textexcept:return""defget_universities(html):"""找到數據"""soup=BeautifulSoup(html,"html.parser") #用?html.parser?解析程序代碼rows=soup.find_all('tr') #獲取所有表格行fortrinrows:cells=tr.find_all('td') #獲取所有單元格iflen(cells)==0: #忽略一些行continueuniv=[] #用來存放各項數據fortdincells:univ.append(td.text)all_univ.append(univ) #加入到總列表中defprint_universities_top(num):"""顯示數據"""print("排名","學校名稱","類型","總分",sep="\t")foriinrange(num):u=all_univ[i]print(u[0],u[1],u[3],u[4],sep="")defmain():url='https://www.A.cn/rankings/bcur/2022' #將網址賦給變量?urlhtml=get_html(url) #獲得網頁內容get_universities(html) #解析得到數據print_universities_top(10) #顯示前?10?所大學main()運行結果如下。排名學校名稱類型總分1清華大學TsinghuaUniversity雙一流/985/211綜合9

溫馨提示

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

評論

0/150

提交評論