14_爬取與分析網(wǎng)頁中的數(shù)據(jù)教學(xué)課件_第1頁
14_爬取與分析網(wǎng)頁中的數(shù)據(jù)教學(xué)課件_第2頁
14_爬取與分析網(wǎng)頁中的數(shù)據(jù)教學(xué)課件_第3頁
14_爬取與分析網(wǎng)頁中的數(shù)據(jù)教學(xué)課件_第4頁
14_爬取與分析網(wǎng)頁中的數(shù)據(jù)教學(xué)課件_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Python 3 程序設(shè)計 主講教師: 人民郵電出版社14 爬爬取與分析網(wǎng)頁中的數(shù)據(jù)取與分析網(wǎng)頁中的數(shù)據(jù)人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列第14章 爬爬取與分析網(wǎng)頁中的數(shù)據(jù)取與分析網(wǎng)頁中的數(shù)據(jù) 本章內(nèi)容本章內(nèi)容 爬取網(wǎng)頁的urllib庫和requests庫 解析網(wǎng)頁的beautifulsoup4庫 網(wǎng)頁爬取技術(shù)的應(yīng)用爬取網(wǎng)頁就是通過程序下載網(wǎng)頁,分析網(wǎng)頁中的不同元素,從中提取有用的數(shù)據(jù)。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.1 爬取網(wǎng)頁的爬取網(wǎng)頁的urllib和和requests庫庫網(wǎng)頁爬取,就是把URL地址中指定的網(wǎng)絡(luò)

2、資源從網(wǎng)絡(luò)流中讀取出來,保存到本地。urllib和urllib2兩個標準庫均支持網(wǎng)頁內(nèi)容讀取。Python3使用標準庫urllib庫來讀取網(wǎng)頁。requests是目前優(yōu)秀的網(wǎng)頁內(nèi)容抓取的第三方庫。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.1 爬取網(wǎng)頁的爬取網(wǎng)頁的urllib和和requests庫庫 爬取網(wǎng)頁的基礎(chǔ)知識爬取網(wǎng)頁的基礎(chǔ)知識 1. HTTP協(xié)議協(xié)議 用戶瀏覽網(wǎng)頁的過程是客戶端與Web服務(wù)器請求應(yīng)答的過程。 瀏覽器與服務(wù)器之間的通信的基礎(chǔ)是HTTP協(xié)議。 HTTP協(xié)議是一個無狀態(tài)的協(xié)議,同一個客戶端的一次請求和上次請求沒有對應(yīng)關(guān)系。2HTTP工作過程(

3、1)客戶端與服務(wù)器建立連接。(2)服務(wù)器接到請求后,給予相應(yīng)的響應(yīng)信息。(3)客戶端接收服務(wù)器所返回的信息,瀏覽器解析并顯示網(wǎng)頁。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.1 爬取網(wǎng)頁的爬取網(wǎng)頁的urllib和和requests庫庫 爬取網(wǎng)頁的基礎(chǔ)知識爬取網(wǎng)頁的基礎(chǔ)知識3. 網(wǎng)絡(luò)爬蟲 也叫網(wǎng)絡(luò)蜘蛛(Web Spider),Spider就是一只網(wǎng)上的蜘蛛,它是搜索引擎抓取系統(tǒng)的重要組成部分。 網(wǎng)絡(luò)爬蟲的主要目的是將互聯(lián)網(wǎng)的網(wǎng)頁下載到本地從而保存文件或備份文件。 Web站點上的每個資源都有唯一的地址,該地址稱為URL。 protocol:/hostname:por

4、t/path 網(wǎng)絡(luò)爬蟲就是根據(jù)URL來獲取網(wǎng)頁信息的。 網(wǎng)絡(luò)爬蟲應(yīng)用分為兩個步驟:連接網(wǎng)絡(luò)并獲取網(wǎng)頁內(nèi)容urllib(或requests);對獲得的網(wǎng)頁內(nèi)容進行處理(beautifulsoup4)。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.1 爬取網(wǎng)頁的爬取網(wǎng)頁的urllib和和requests庫庫 urllib庫庫1. urllib庫簡介 urllib庫提供系列函數(shù)或方法,用于獲取網(wǎng)頁信息或下載網(wǎng)頁。 urllib.request模塊。 urllib.error模塊。 urllib.parse模塊。 urllib.robotparser模塊。2. 使用url

5、lib庫獲取網(wǎng)頁信息 使用 urllib.request.urlopen()函數(shù)可以打開一個網(wǎng)站,讀取并打印網(wǎng)頁信息。 urllib.urlopen(url, data, proxies)人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.1 爬取網(wǎng)頁的爬取網(wǎng)頁的urllib和和requests庫庫2. 使用urllib庫獲取網(wǎng)頁信息 urlopen()函數(shù)返回response對象 函數(shù)的參數(shù)url表示遠程數(shù)據(jù)的路徑;data表示提交到url的數(shù)據(jù);proxies用于設(shè)置代理。 response對象的方法 readline()、readlines()、fileno()、

6、close()等方法。 info()方法:返回一個httplib.HTTPMessage對象。 getcode()方法:返回HTTP狀態(tài)碼。如果是HTTP請求,200表示請求成功完成,404表示網(wǎng)址未找到。 geturl():返回請求的url。例14-1 抓取搜狐網(wǎng)首頁的前360個字節(jié)內(nèi)容。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.1 爬取網(wǎng)頁的爬取網(wǎng)頁的urllib和和requests庫庫 requests庫庫1. requests庫概述 簡潔的處理HTTP請求的第三方庫,建立在Python的urllib3庫基礎(chǔ)上,是對urllib3庫的再封裝。 reque

7、sts庫包括URL獲取、HTTP長連接和連接緩存、自動內(nèi)容解碼、文件分塊上傳、連接超時處理、流數(shù)據(jù)下載等功能。2. requests庫解析 requests庫的requests.get()方法功能是網(wǎng)絡(luò)爬蟲和信息提交res=requests.get(url,timeout=n) 該函數(shù)返回的網(wǎng)頁內(nèi)容會保存為一個response對象。參數(shù)url必須采用HTTP或HTTPS方式訪問,可選參數(shù)timeout用于設(shè)定每次請求超時時間。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.1 爬取網(wǎng)頁的爬取網(wǎng)頁的urllib和和requests庫庫 requests庫庫下面的代碼測

8、試requests.get()方法和requests.head()方法的返回值類型。 import requests r=requests.get(http:/) type(r) r2=requests.head(http:/) type(r2)人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.1 爬取網(wǎng)頁的爬取網(wǎng)頁的urllib和和requests庫庫 requests庫庫 requests.get() 返回的response對象代表響應(yīng)。response對象的主要屬性如下。 statuscode:返回HTTP請求的狀態(tài),200表示連接成功,404表示失敗。 tex

9、t:HTTP響應(yīng)內(nèi)容的字符串形式,即url對應(yīng)的頁面內(nèi)容。 encoding:HTTP響應(yīng)內(nèi)容的編碼方式。 content:HTTP響應(yīng)內(nèi)容的二進制形式。 Response對象提供了兩個方法。 json():如果HTTP響應(yīng)內(nèi)容包含JSON格式數(shù)據(jù),則該方法解析JSON數(shù)據(jù)。 raise_for_status():如果status_code值不是200,則產(chǎn)生異常。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.1 爬取網(wǎng)頁的爬取網(wǎng)頁的urllib和和requests庫庫例14-3 爬取網(wǎng)頁內(nèi)容的示例。 2 import requests 4 def getHTML

10、Text(): 5 r=requests.get(url,timeout=15) 6 r.raise_for_status() 7 r.encoding=utf-8 #更改編碼方式為utf-8 8 return r.text:20010 url = http:/11 text=getHTMLText()12 print(text)人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.2 解析網(wǎng)頁的beautifulsoup4庫 beautifulsoup4庫庫概述概述 beautifulsoup4庫也稱為bs4庫或BeautifulSoup庫 Python用于網(wǎng)頁分析的第

11、三方庫,用來快速轉(zhuǎn)換被抓取的網(wǎng)頁。 beautifulsoup4將網(wǎng)頁轉(zhuǎn)換為一顆DOM樹。 beautifulsoup4提供一些簡單的方法以及類Python語法來查找、定位、修改一棵轉(zhuǎn)換后的DOM樹,還能自動將送進來的文檔轉(zhuǎn)換為Unicode編碼。例14-4 使用bs4庫訪問網(wǎng)頁元素。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.2 解析網(wǎng)頁的beautifulsoup4庫 beautifulsoup4庫的對象庫的對象 BeautifulSoup將HTML文檔轉(zhuǎn)換成一個樹形結(jié)構(gòu),每個結(jié)點都是 對象,可以歸納為4種類型:Tag、NavigableString、Bea

12、utifulSoup、Comment。 Tag對象,HTML中的一個標簽。 NavigableString對象,用于操縱標簽內(nèi)部的文字,標簽的string屬性返回NavigableString對象。 BeautifulSoup對象,表示的是一個文檔的全部內(nèi)容,大部分時候可以把它看作是一個特殊的Tag。 Comment對象,是一個特殊類型的NavigableSting對象,它的內(nèi)容不包括注釋符號。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.2 解析網(wǎng)頁的beautifulsoup4庫 BeautifulSoup庫操作解析文檔樹庫操作解析文檔樹1. 遍歷文檔樹(1)

13、獲取直接子結(jié)點contents屬性和children屬性可以獲取Tag的直接子結(jié)點。(2)獲取所有有子結(jié)點descendants屬性可以對所有Tag的子結(jié)點進行遞歸循環(huán),需要遍歷獲取其中的內(nèi)容。(3)獲取結(jié)點內(nèi)容 當標簽中不再包含標簽,string屬性返回標簽中的內(nèi)容; 標簽中內(nèi)嵌唯一標簽,那么string屬性返回最里面標簽的內(nèi)容; Tag包含了多個子標簽結(jié)點,string的輸出結(jié)果是None。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.2 解析網(wǎng)頁的beautifulsoup4庫 BeautifulSoup庫操作解析文檔樹庫操作解析文檔樹1. 遍歷文檔樹(4)

14、獲取多項內(nèi)容strings屬性用于獲取多個內(nèi)容,需要遍歷獲取。(5)父結(jié)點父結(jié)點是當前結(jié)點的上級結(jié)點,parent屬性用于獲取父結(jié)點。(6)兄弟結(jié)點兄弟結(jié)點可以理解為和本結(jié)點處在同一層級的結(jié)點,next_sibling屬性用于獲取當前結(jié)點的下一個兄弟結(jié)點,previous_sibling則與之相反,如果結(jié)點不存在,則返回None。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.2 解析網(wǎng)頁的beautifulsoup4庫2. 搜索文檔樹搜索文檔樹(1)find_all()方法搜索當前Tag的所有子結(jié)點,語法如下。find_all(name,attrs,recursi

15、ve,text,*kwargs) name:名字為name的標簽。 attrs:按照Tag標簽屬性值檢索,采用字典形式。 recursive:如果只想搜索Tag的直接子結(jié)點,可以使用參數(shù)recursive=False。 text:通過text參數(shù)可以搜索文本字符中內(nèi)容。 limit:限制返回結(jié)果的數(shù)量。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.2 解析網(wǎng)頁的beautifulsoup4庫2. 搜索文檔樹搜索文檔樹(2)find()方法find()方法返回找到的第一個結(jié)果。find(name,attrs,recursive,text)參數(shù)含義與find_all(

16、)方法完全相同。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.2 解析網(wǎng)頁的beautifulsoup4庫3. 用CSS選擇器篩選元素 CSS的選擇器用于選擇網(wǎng)頁元素,可以分為標簽選擇器、類選擇器和id選擇器三種。 在CSS中,標簽名不加任何修飾,類名前面需要加點(.)標識,id名前加#號來標識。 在bs4庫中,也可以利用類似的方法來篩選元素,用到的方法是soup.select(),返回類型是列表。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.3 網(wǎng)頁爬取技術(shù)的應(yīng)用 Python爬取指定URL的網(wǎng)頁頁面,首先需要分析頁面的結(jié)構(gòu),了解標

17、題、鏈接、時間等信息(即HTML元素和屬性的描述)。 以爬取“東北新聞網(wǎng)”的 國內(nèi)新聞 頁面為例,說明網(wǎng)頁爬取的過程。 特別需要指出的是,爬取網(wǎng)頁時,網(wǎng)站的網(wǎng)址或網(wǎng)頁的結(jié)構(gòu)可能有改變,解析網(wǎng)頁時需要考慮這些因素。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.3 網(wǎng)頁爬取技術(shù)的應(yīng)用 爬取單一網(wǎng)頁頁面的信息爬取單一網(wǎng)頁頁面的信息 爬取頁面前的準備用Google Chrome瀏覽器打開要爬取的頁面,進入網(wǎng)頁,打開“開發(fā)者工具”窗口。使用選擇工具選擇 網(wǎng)頁元素。 使用requests庫爬取網(wǎng)頁 使用bs4庫解析網(wǎng)頁例14-5 使用requests庫和bs4庫網(wǎng)頁爬取示例。

18、人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.3 網(wǎng)頁爬取技術(shù)的應(yīng)用 爬取來自多個頁面的爬取來自多個頁面的信信息息 爬取的信息可能需要來自多個頁面。 在這種情況下,用戶可對爬取信息設(shè)置條件限制,例如設(shè)置爬取關(guān)鍵詞,或者檢索某一時間段的信息等。 爬取“遼寧本科教學(xué)網(wǎng)”通知公告頁面中2021年8月1日之后的信息使用requests庫爬取網(wǎng)頁。 關(guān)鍵技術(shù) “下一頁”按鈕的使用 日期格式的處理人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.3 網(wǎng)頁爬取技術(shù)的應(yīng)用 爬取單一網(wǎng)頁頁面的信息爬取單一網(wǎng)頁頁面的信息 查詢的信息可能來自多個頁面時,可通過“下一頁”按鈕,可以找到后續(xù)頁面的鏈接。當要爬取的內(nèi)容很多時,用戶可以不斷單擊“下一頁”按鈕向后查找。 觀察瀏覽器的地址欄,URL地址可以視為由兩部分組成,通過一部分是網(wǎng)址,另一部分是文件路徑,這部分地址應(yīng)和“下一頁”按鈕的鏈接地址是一致的。 在“開發(fā)者窗口”中,觀察“下一頁”按鈕對應(yīng)的網(wǎng)頁中信息,找到該按鈕對應(yīng)的頁面地址。 不同頁面的地址表達是不一樣的,需要認真觀察找出規(guī)律。人民郵電出版社Python 3 程序設(shè)計程序設(shè)計程序設(shè)計新形態(tài)精品系列14.3 網(wǎng)頁

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論