![人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元三 Requests網(wǎng)頁訪問_第1頁](http://file4.renrendoc.com/view14/M05/3B/15/wKhkGWdayxeABX2jAACTvpmQU3s075.jpg)
![人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元三 Requests網(wǎng)頁訪問_第2頁](http://file4.renrendoc.com/view14/M05/3B/15/wKhkGWdayxeABX2jAACTvpmQU3s0752.jpg)
![人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元三 Requests網(wǎng)頁訪問_第3頁](http://file4.renrendoc.com/view14/M05/3B/15/wKhkGWdayxeABX2jAACTvpmQU3s0753.jpg)
![人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元三 Requests網(wǎng)頁訪問_第4頁](http://file4.renrendoc.com/view14/M05/3B/15/wKhkGWdayxeABX2jAACTvpmQU3s0754.jpg)
![人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元三 Requests網(wǎng)頁訪問_第5頁](http://file4.renrendoc.com/view14/M05/3B/15/wKhkGWdayxeABX2jAACTvpmQU3s0755.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
任務(wù)1Requests數(shù)據(jù)采集
任務(wù)2BeautifulSoup文本解析任務(wù)1Requests數(shù)據(jù)采集本次任務(wù)基于Requests庫實現(xiàn)豆瓣電影排行信息的爬取,其中包含與HTTP請求相關(guān)的內(nèi)容、Requests的安裝和使用、爬蟲的實現(xiàn)、Requests實現(xiàn)爬蟲、爬取信息JSON化等內(nèi)容。本次任務(wù)的主要內(nèi)容如下:(1)安裝Requests,成功調(diào)用Requests庫。(2)分析豆瓣電影信息網(wǎng)站。(3)編寫代碼,爬取信息。(4)將爬取的信息JSON化,并輸出?!救蝿?wù)描述】一、網(wǎng)絡(luò)請求網(wǎng)絡(luò)請求是客戶端和服務(wù)器端進(jìn)行數(shù)據(jù)交換的一種手段。通過網(wǎng)絡(luò)請求,客戶端可以從服務(wù)器端獲取需要的數(shù)據(jù),也可以在收到請求后返回數(shù)據(jù)。網(wǎng)絡(luò)請求過程如圖3-1所示。客戶端要獲取某些信息,會通過網(wǎng)絡(luò)向服務(wù)器端發(fā)送一個請求,服務(wù)器端會對請求進(jìn)行拆解,并通過自己的存儲空間或者數(shù)據(jù)庫搜索數(shù)據(jù),然后將數(shù)據(jù)返回到客戶端。【知識準(zhǔn)備】1.?HTTP請求HTTP請求是指從客戶端到服務(wù)器端的請求消息,包括消息首行中、對資源的請求方法、資源的標(biāo)識符及使用的協(xié)議。只有通過HTTP才能實現(xiàn)網(wǎng)絡(luò)請求。HTTP還規(guī)定了請求的數(shù)據(jù)格式、請求的頭部、采用的協(xié)議等內(nèi)容。HTTP請求都是通過URL發(fā)起的。URL的形式如圖3-2所示。每訪問一次,URL就進(jìn)行一次網(wǎng)絡(luò)請求,每進(jìn)行一次網(wǎng)絡(luò)請求,服務(wù)器端對應(yīng)會收到一個網(wǎng)絡(luò)響應(yīng)。例如,訪問百度網(wǎng)的地址/,打開瀏覽器,在地址欄輸入地址,按鼠標(biāo)右鍵選擇“檢查”,對地址按下回車鍵,瀏覽器開發(fā)者工具的“Network”欄中會產(chǎn)生一個網(wǎng)絡(luò)請求,如圖3-3所示。每一個網(wǎng)絡(luò)請求都有Name、Status、Type、Initiator、Size、Time、Waterfall等屬性。屬性說明如表3-1所示。2.請求和響應(yīng)請求是指從客戶端到服務(wù)器端的請求消息。一個完整的HTTP請求可以分為三個部分:請求行、請求頭、請求體。請求結(jié)構(gòu)如圖3-4所示。請求行中包含請求的方法、請求的URL、協(xié)議版本及換行符號(CRLF);請求頭中包含多組鍵值對的數(shù)據(jù)和換行符號;請求體當(dāng)中包含請求的主體。響應(yīng)是指服務(wù)端對客戶端請求的回應(yīng)。一個完整的響應(yīng)同樣包含三個部分,分別是狀態(tài)碼、響應(yīng)頭和響應(yīng)體。響應(yīng)頭中包含服務(wù)器的應(yīng)答信息,即Content-Type、Data、Expires等內(nèi)容。一個響應(yīng)最重要的內(nèi)容就是響應(yīng)體,響應(yīng)的正文數(shù)據(jù)、文件、圖片等信息都稱為響應(yīng)體。例如,請求一個地址時,通過瀏覽器中的“Preview”就可以查看響應(yīng)體的內(nèi)容。訪問百度網(wǎng)的響應(yīng)信息如圖3-5所示。二、爬蟲基礎(chǔ)爬蟲是獲取網(wǎng)頁并提取和保存信息的自動化程序。如果將互聯(lián)網(wǎng)比作一張蜘蛛網(wǎng),爬蟲就是在網(wǎng)上爬行的蜘蛛,網(wǎng)上的每一個節(jié)點都可以當(dāng)作一個網(wǎng)頁,蜘蛛爬到每一個節(jié)點就相當(dāng)于訪問了網(wǎng)頁,而每一個節(jié)點又連著許多節(jié)點,這些節(jié)點就可以當(dāng)作網(wǎng)頁內(nèi)的鏈接,因此爬蟲可以訪問所有的節(jié)點。爬蟲的架構(gòu)如圖3-6所示。爬蟲調(diào)度器開啟后,爬蟲會指定一個鏈接(URL),爬蟲使用這個鏈接請求對應(yīng)的資源,對頁面進(jìn)行下載,下載后對網(wǎng)頁進(jìn)行解析,網(wǎng)頁中包含的URL會繼續(xù)解析,直到解析完所有的URL就完成了一次爬取。整個爬取過程可以分為三個步驟,分別是爬取數(shù)據(jù)、提取信息以及保存數(shù)據(jù)。(1)每個爬蟲程序都有若干個請求和響應(yīng),響應(yīng)的內(nèi)容是網(wǎng)頁的源代碼。(2)獲取到網(wǎng)頁的源代碼后,需要提取源代碼中有價值的信息。(3)最后一步就是將提取到的數(shù)據(jù)保存下來,以便于進(jìn)行數(shù)據(jù)分析和處理。三、Requests簡介及安裝Requests是唯一一個非轉(zhuǎn)基因的PythonHTTP庫。在Requests之前,PythonHTTP庫就出現(xiàn)過urllib庫,但是由于urllib存在安全缺陷以及代碼冗余等,現(xiàn)在已經(jīng)很少使用。Requests庫建立在urllib之上,它解決了urllib存在的問題,而且允許用戶發(fā)送原始的HTTP1.1版本的請求。Requests的圖標(biāo)如圖3-7所示。Requests的安裝簡單,可使用pip命令安裝。代碼如下所示。安裝完成后,使用import引入Requests庫,調(diào)用Requests的get()方法向發(fā)送請求,代碼如下所示。結(jié)果如圖3-8所示。四、Requests的基礎(chǔ)使用Requests爬蟲是利用Requests技術(shù)實現(xiàn)爬取網(wǎng)頁內(nèi)容的一種功能,但是在實現(xiàn)Requests爬蟲之前需要了解更多的Requests技術(shù),否則會在實現(xiàn)Requests爬蟲的過程中遇到諸多問題。Requests可以使用get()方法和post()方法發(fā)送請求,除發(fā)起請求的方式不同外,get()和post()的參數(shù)和使用方法都相同。下面以get()方法為例,介紹如何使用Requests向URL發(fā)起請求。requests.get()請求方法包含的部分參數(shù)如表3-2所示。其中,**kwagrs包含的參數(shù)如表3-3所示。在使用requests.get()請求url時會返回一個Response對象,該對象包含了多個用于查看詳細(xì)信息的屬性。Response對象包含的部分屬性如表3-4所示。使用requests.get()方法訪問“”,并且使用params參數(shù)傳入請求數(shù)據(jù),請求數(shù)據(jù)會自動拼接到url上,代碼如下所示。此時調(diào)用res.url會顯示請求時的完整參數(shù),與人工拼接參數(shù)相比,這個功能的效率和準(zhǔn)確度要高得多。Requests除了可以攜帶請求參數(shù)以外,還可以自定義請求的請求頭。請求頭由鍵值對組成,這些鍵值對包含了數(shù)據(jù)類型(Content-Type)、時間(Date)、跨域資源訪問(Access-Control-Allow-Origin)、用戶代理(User-Agent)等。在使用爬蟲爬取網(wǎng)頁數(shù)據(jù)時,需要通過請求頭將請求偽裝成從瀏覽器發(fā)出去的,因為許多網(wǎng)站設(shè)置了反爬蟲機制,會過濾掉來自除瀏覽器外的其他請求。偽裝成瀏覽器的方法就是設(shè)置用戶代理信息(User-Agent)。Requests庫除了在請求之前進(jìn)行設(shè)置以外,還可以對輸出進(jìn)行設(shè)置。通常情況下,Requests會自動解碼來自服務(wù)器的內(nèi)容,大多數(shù)unicode字符集都能被無縫解碼,但是有時候難免會出現(xiàn)亂碼,如圖3-10所示,這時可以通過設(shè)置輸出字符的編碼格式進(jìn)行調(diào)整。一般設(shè)置res.encoding,即將字符集設(shè)置為“utf-8”即可解決。設(shè)計字符集的代碼如下所示。結(jié)果如圖3-11所示。另外,可以使用res.content、res.json()和res.text將輸出的內(nèi)容轉(zhuǎn)化成字節(jié)形式和JSON形式,三種方法相比較,res.content方法的使用率較低,res.json()和res.text的使用率較高。需要注意的是,如果使用res.json()轉(zhuǎn)化失敗,顯示轉(zhuǎn)化異常,則即使調(diào)用成功,也需要通過res.status_code(狀態(tài)碼)判斷請求是否成功,并查明出錯的原因。在日常生活中,我們在瀏覽器中登錄了某個網(wǎng)站,當(dāng)我們第二次打開這個網(wǎng)站的時候不需要登錄,直接就是登錄狀態(tài),這種狀態(tài)一般會保持七天左右。實現(xiàn)這一功能使用的就是cookie功能,如果請求的響應(yīng)中攜帶著cookie信息,則服務(wù)器就會通過res.cookies讀取cookie的內(nèi)容,并將cookie信息發(fā)送給客戶端。也可以通過在請求中設(shè)置cookies="要設(shè)置的cookies內(nèi)容"來實現(xiàn)這一功能,代碼如下所示。結(jié)果如圖3-12所示。五、Requests的高級使用Requests有許多高級用法,比如可以讓用戶跨請求保持某些參數(shù)的會話對象、請求和響應(yīng)對象、SSL證書、事件掛鉤、代理等,掌握這些高級的用法是成為高級程序員的關(guān)鍵。1.會話對象會話對象能夠跨請求保持某些參數(shù),也會在同一個Session()實例發(fā)出的所有請求之間保持cookie。除此之外,會話對象還可以用來提升網(wǎng)絡(luò)性能,如果向同一主機發(fā)送多個請求,底層的TCP連接將會被重用,從而帶來顯著的性能提升。會話對象Session()方法的使用如下所示。運行上面的代碼也會對會話對象設(shè)置cookie的信息,如圖3-14所示。2.請求和響應(yīng)對象每一個請求都是一個請求對象(Request),這個對象中包含了請求所需要的URL、請求頭、請求參數(shù)等內(nèi)容,這個對象會被發(fā)送到所請求的服務(wù)器。服務(wù)器對每次請求都會返回一個響應(yīng)對象,服務(wù)器返回的時候不是返回數(shù)據(jù),而是返回一個Response對象,返回的所有信息都被包含在這個Response對象當(dāng)中。可以通過“.”方法調(diào)用任意對象的內(nèi)容,代碼如下所示。結(jié)果如圖3-15所示。3.?SSL證書SSL證書是數(shù)字證書當(dāng)中的一種,它類似于駕駛證、護(hù)照和營業(yè)執(zhí)照的電子副本。因為配置在服務(wù)器上,也稱為SSL服務(wù)器證書。SSL證書通過在客戶端瀏覽器和Web服務(wù)器之間建立一條SSL安全通道(SecureSocketLayer(SSL)),安全協(xié)議是由NetscapeCommunication公司設(shè)計開發(fā)。安全協(xié)議主要用來對用戶和服務(wù)器進(jìn)行認(rèn)證。Requests在使用HTTPS請求時,可以驗證SSL證書,這個功能就像web瀏覽器一樣。Requests的SSL驗證默認(rèn)是開啟的,如果證書驗證失敗,Requests會拋出一個SSLError的界面。如果用戶沒有對網(wǎng)站設(shè)置SSL,就需要在請求中添加verify去傳入一個受信任的CA證書,比如certfile就是一個CA證書文件,配置CA證書文件方法如下所示。4.事件掛鉤Requests支持事件掛鉤,鉤子(hook)的主要作用是提前在可能增加功能的地方預(yù)設(shè)一個鉤子,當(dāng)客戶需要重新修改或者增加這個地方的邏輯的時候,把擴展的類或者方法掛載到這個點即可。在Requests中,可以用鉤子來控制部分請求過程。5.代理Requests可以通過對請求設(shè)置proxies參數(shù)來設(shè)置代理,方法如下所示。任務(wù)2BeautifulSoup文本解析本任務(wù)主要介紹BeautifulSoup文本解析的使用。利用BeautifulSoup文本解析獲取“古詩文網(wǎng)”的詩文數(shù)據(jù),如圖3-22所示?!救蝿?wù)描述】通過Requests獲取到詩文數(shù)據(jù)以后使用BeautifulSoup的節(jié)點選擇器、方法選擇器以及CSS選擇器等功能將文檔內(nèi)容提取,并保存在文本文件中。本章節(jié)的主要內(nèi)容如下:(1)調(diào)入項目需要依賴的庫。(2)定義主函數(shù)和請求頭,獲取請求的數(shù)據(jù)。(3)編寫代碼,逐步拆解數(shù)據(jù),并將數(shù)據(jù)保存到文本文件當(dāng)中。(4)運行代碼,查看輸出結(jié)果。一、BeautifulSoup環(huán)境安裝BeautifulSoup是一個Python的HTML/XML解析器,主要功能是解析和提取HTML/XML數(shù)據(jù),使用BeautifulSoup可以使用戶方便地從網(wǎng)頁中提取數(shù)據(jù)。BeautifulSoup在解析頁面源碼時,只需要將被解析的內(nèi)容作為參數(shù)傳遞給BeautifulSoup的構(gòu)造對象,就可以完成網(wǎng)頁中節(jié)點、文字、元素的提取。除此之外,BeautifulSoup還會自動將輸入的文本轉(zhuǎn)化成unicode的編碼格式,輸出的文檔轉(zhuǎn)化為utf-8的格式。BeautifulSoup的解析效率是人工解析網(wǎng)頁效率的幾百倍,掌握BeautifulSoup的使用可以省去很多煩瑣的提取工作,提高工作效率。BeautifulSoup的安裝方法和其他庫的安裝方法一樣,使用Python的pip工具安裝,安裝工具名稱是beautifulsoup4。安裝代碼如下所示?!局R準(zhǔn)備】服務(wù)器顯示如圖3-23結(jié)果,即為安裝成功。BeautifulSoup不僅支持Python標(biāo)準(zhǔn)庫中的HTML解析器,還支持一些第三方的解析器,比如lxmlHTML解析器、lxmlXML解析器和html5lib解析器等。BeautifulSoup支持的解析器如表3-5所示。表3-5中的第三方解析器在使用時需要單獨安裝,若不安裝該解析器,BeautifulSoup會使用Python默認(rèn)的解析庫。如安裝lxml解析庫的代碼如下所示。通過BeautifulSoup的一個使用示例來體現(xiàn)BeautifulSoup的強大之處,定義一個html結(jié)構(gòu)的字符串。通過import引用BeautifulSoup,并使用BeautifulSoup構(gòu)造對象,傳遞兩個參數(shù),第一個參數(shù)是需要解析的內(nèi)容,第二個參數(shù)是設(shè)置解析器的類型,之后調(diào)用prettify()方法將輸入的內(nèi)容按照標(biāo)準(zhǔn)的縮進(jìn)格式輸出,代碼如下所示。結(jié)果如圖3-24所示。代碼中html結(jié)構(gòu)的字符串并不是一個完整的HTML結(jié)構(gòu),因為body標(biāo)簽和html標(biāo)簽并沒有閉合。而BeautifulSoup在輸出結(jié)果中自動補全了body標(biāo)簽和html標(biāo)簽,即對于不標(biāo)準(zhǔn)的HTML字符串,BeautifulSoup可以自動進(jìn)行更正。若要提取HTML頁面中的文本內(nèi)容,只需通過BeautifulSoup對象調(diào)用get_text()方法即可,代碼如下所示。結(jié)果如下圖所示。二、BeautifulSoup使用使用BeautifulSoup時,需要將一段文檔傳入BeautifulSoup的構(gòu)造方法,就能得到一個文檔對象,可以傳入一段字符串或一個文件句柄。1.對象的種類BeautifulSoup會將HTML文檔轉(zhuǎn)換為一個復(fù)雜的樹形結(jié)構(gòu),這個樹上的每個節(jié)點都是Python對象,所有對象可以歸納為4種:Tag、NavigableString、BeautifulSoup和Comment,每個對象都有不同的含義和作用。1)?Tag對象Tag對象表示標(biāo)簽。與XML和HTML中的Tag一樣,Tag對象在獲取屬性時默認(rèn)通過字典的方式存儲,若要改變這些屬性需要使用為字典賦值的方式進(jìn)行修改。Tag對象中主要有兩個屬性,如表3-6所示。2)?NavigableString對象NavigableString對象可以返回一個可遍歷的字符串。在BeautifulSoup中獲取的Tag(標(biāo)簽)中間的字符串就用NavigableString類來包裝,因此,可以通過對象Tag的string屬性獲取到NavigableString類的對象。3)?BeautifulSoup對象BeautifulSoup對象表示一個頁面的所有內(nèi)容,也可以看作是一個Tag,這個Tag中包含所有的子標(biāo)簽。BeautifulSoup與其他的Tag存在著不一樣的地方,比如“.attribute”是不存在的,因為文檔的頂級對象是沒有屬性的,再比如調(diào)用“.name”,只會輸出“document”。4)?Comment對象Comment對象是NavigableString對象的子類,在提取頁面數(shù)據(jù)方面,Tag對象和BeautifulSoup對象以及NavigableString對象可以實現(xiàn)所有的需求。對于一些特殊的需求,如獲取網(wǎng)頁的注釋,因為網(wǎng)頁中的注釋只會在網(wǎng)頁的源代碼中顯示,而不顯示在頁面中,可以使用Comment對象進(jìn)行獲取。2.節(jié)點選擇器使用BeautifulSoup對象調(diào)用節(jié)點名稱可以獲取該節(jié)點,再通過調(diào)用string屬性就可以獲取節(jié)點內(nèi)的NavigableString字符串,但是如果遇到節(jié)點特別多,結(jié)構(gòu)復(fù)雜的網(wǎng)頁時,使用這種方式就會顯得極為煩瑣。在選擇節(jié)點不能做到一步選擇到位時,可以先選擇一個元素作為節(jié)點,然后選擇其子節(jié)點、父節(jié)點、兄弟節(jié)點等,這就是關(guān)聯(lián)選擇。1)子節(jié)點選擇器使用BeautifulSoup對象選擇到一個節(jié)點以后,如需獲取這個節(jié)點的子節(jié)點(子節(jié)點是指當(dāng)前節(jié)點中包含的節(jié)點),可以使用子節(jié)點選擇器,常用子節(jié)點選擇器分別為contents和children。屬性如表3-7所示。2)父節(jié)點選擇器包含當(dāng)前節(jié)點的節(jié)點稱之為當(dāng)前節(jié)點的父節(jié)點,父節(jié)點與子節(jié)點存在包含與被包含的關(guān)系,Tag對象和字符串對象都被包含在父節(jié)點當(dāng)中的,通過parent和parents屬性可以獲取當(dāng)前節(jié)點的父節(jié)點。屬性如表3-8所示。除了使用parent屬性獲取父節(jié)點,還可以使用parents獲取父節(jié)點。與parent不同的是,parents可以像children屬性一樣使用for循環(huán)遍歷,獲取a標(biāo)簽后調(diào)用parents屬性,使用for循環(huán)進(jìn)行輸出。3)兄弟節(jié)點如果兩個節(jié)點有一個共同的父節(jié)點,那它們就是兄弟節(jié)點,可以使用next_sibling屬性和previous_sibling屬性獲取兄弟節(jié)點。屬性如表3-9所示。3.方法選擇器方法選擇器常用于搜索文檔樹,因為文檔是結(jié)構(gòu)化的,使用正確的方法搜索文檔樹能提高搜索的效率。常見的搜索文檔樹的方法選擇器有find_all()和find()方法,掌握這兩種方
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年安全準(zhǔn)入考試練習(xí)試卷附答案
- 稽核人員上崗考試練習(xí)卷含答案
- 產(chǎn)房練習(xí)測試題附答案
- 9萬合同寫合同范本
- 農(nóng)村無證土地合同范本
- 保安公司勞務(wù)合同范本
- 2025年度房地產(chǎn)經(jīng)紀(jì)合同服務(wù)內(nèi)容與傭金收費標(biāo)準(zhǔn)規(guī)范
- 山東密封用填料及類似品制造市場前景及投資研究報告
- 買賣合同范本買方
- 1986電站用工合同范本
- 全國教育科學(xué)規(guī)劃課題申報書:02.《鑄牢中華民族共同體意識的學(xué)校教育研究》
- 三位數(shù)除以兩位數(shù)過關(guān)練習(xí)口算題大全附答案
- 紅樓夢服飾文化
- 軟件系統(tǒng)平臺項目實施方案
- 湖北省2024年村干部定向考試真題
- 2024年沙石材料運輸合同
- 老年人能力評估標(biāo)準(zhǔn)解讀-講義課件
- 教育心理學(xué)課件(完整版)
- 醫(yī)保物價管理培訓(xùn)
- JIS-D1601-1995-汽車零部件振動試驗方法
- 《電氣作業(yè)安全培訓(xùn)》課件
評論
0/150
提交評論