Python網(wǎng)絡爬蟲 課件 項目2:網(wǎng)絡爬蟲基礎知識_第1頁
Python網(wǎng)絡爬蟲 課件 項目2:網(wǎng)絡爬蟲基礎知識_第2頁
Python網(wǎng)絡爬蟲 課件 項目2:網(wǎng)絡爬蟲基礎知識_第3頁
Python網(wǎng)絡爬蟲 課件 項目2:網(wǎng)絡爬蟲基礎知識_第4頁
Python網(wǎng)絡爬蟲 課件 項目2:網(wǎng)絡爬蟲基礎知識_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目二

網(wǎng)絡爬蟲基礎知識任務1網(wǎng)絡爬蟲概述任務2HTTP協(xié)議任務3網(wǎng)頁請求過程任務1網(wǎng)絡爬蟲概述任務引入小白基本上每天晚上都會上論壇找電影,他想看“院線大片”+“最近十年”的所有電影,按照分類查找想要看的電影的,但是竟然沒有多選,不能同時選擇兩個或多個分類進行查找。只能先選擇分類“院線大片”,然后一年一年的查找。這樣找了幾天后,小白發(fā)現(xiàn)這種方法簡直太傻了,于是百度了下,第一次知道了“爬蟲”。于是,在強大的興趣驅(qū)動下,學習使用爬蟲進行查找電影。那么,Python的爬蟲是什么?能實現(xiàn)什么功能?知識準備網(wǎng)絡爬蟲(又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡機器人)就是模擬瀏覽器發(fā)送網(wǎng)絡請求,接收請求響應,一種按照一定的規(guī)則,自動地抓取互聯(lián)網(wǎng)信息的程序。網(wǎng)絡爬蟲可以用來爬表格、爬圖片、爬視頻等數(shù)據(jù),只要能通過瀏覽器訪問的數(shù)據(jù)都可以通過爬蟲獲取。一、網(wǎng)絡爬蟲基本原理平常用瀏覽器瀏覽網(wǎng)頁的時候,鼠標輸入并單擊一個網(wǎng)絡地址,瀏覽器向這個網(wǎng)頁發(fā)送了請求(request),維護網(wǎng)頁的服務器收到了這個請求,判定這個請求是有效的,于是返回了一些響應信息(response)到瀏覽器,瀏覽器將這些信息進行渲染,就顯示平??吹降木W(wǎng)頁。網(wǎng)絡爬蟲實質(zhì)是模擬瀏覽器的這個過程,一般網(wǎng)絡爬蟲的基本過程如圖所示。爬蟲的工作流程

網(wǎng)頁的鏈接二、網(wǎng)絡爬蟲系統(tǒng)框架網(wǎng)絡爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。爬蟲的主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地形成一個或聯(lián)網(wǎng)內(nèi)容的鏡像備份。在網(wǎng)絡爬蟲的系統(tǒng)框架中,主過程由控制器、解析器、資源庫三部分組成,控制器是網(wǎng)絡爬蟲的中央控制器,它主要是負責根據(jù)系統(tǒng)傳過來的URL鏈接,分配線程,然后啟動線程調(diào)用爬蟲爬取網(wǎng)頁的過程。解析器的主要工作是下載網(wǎng)頁、進行頁面的處理,主要是將一些JS腳本標簽、CSS代碼內(nèi)容、空格字符、HTML標簽等內(nèi)容處理掉,爬蟲的基本工作是由解析器完成。資源庫是用來存放下載到的網(wǎng)頁資源,一般都采用大型的數(shù)據(jù)庫存儲,如Oracle數(shù)據(jù)庫,并對其建立索引。圖片資源的定位符網(wǎng)絡爬蟲大體流程分三步,如圖所示。三、爬行策略為提高工作效率,網(wǎng)絡爬蟲會采取一定的爬行策略,常用的爬行策略有:深度優(yōu)先策略、廣度優(yōu)先策略和最佳優(yōu)先策略。(1)深度優(yōu)先策略:其基本方法是按照深度由低到高的順序,依次訪問下一級網(wǎng)頁鏈接,直到不能再深入為止。(2)廣度優(yōu)先策略:此策略按照網(wǎng)頁內(nèi)容目錄層次深淺來爬行頁面,處于較淺目錄層次的頁面首先被爬行。(3)最佳優(yōu)先策略最佳優(yōu)先搜索策略按照一定的網(wǎng)頁分析算法,預測候選URL與目標網(wǎng)頁的相似度,或與主題的相關性,并選取評價最好的一個或幾個URL進行抓取。四、網(wǎng)絡爬蟲的分類網(wǎng)絡爬蟲按照系統(tǒng)結(jié)構(gòu)和實現(xiàn)技術(shù),大致可以分為以下幾種類型:通用網(wǎng)絡爬蟲、聚焦網(wǎng)絡爬蟲、增量式網(wǎng)絡爬蟲、深層網(wǎng)絡爬蟲。實際的網(wǎng)絡爬蟲系統(tǒng)通常是幾種爬蟲技術(shù)相結(jié)合實現(xiàn)的。1.通用網(wǎng)絡爬蟲通用網(wǎng)絡爬蟲又稱全網(wǎng)爬蟲,爬行對象從一些種子URL擴充到整個Web,主要為門戶站點搜索引擎和大型Web服務提供商采集數(shù)據(jù)。2.聚焦網(wǎng)絡爬蟲聚焦網(wǎng)絡爬蟲(FocusedCrawler),又稱主題網(wǎng)絡爬蟲(TopicalCrawler),是指選擇性地爬行那些與預先定義好的主題相關頁面的網(wǎng)絡爬蟲。3.增量式網(wǎng)絡爬蟲增量式網(wǎng)絡爬蟲(IncrementalWebCrawler)是指對已下載網(wǎng)頁采取增量式更新和只爬行新產(chǎn)生的或者已經(jīng)發(fā)生變化網(wǎng)頁的爬蟲,它能夠在一定程度上保證所爬行的頁面是盡可能新的頁面。4.DeepWeb爬蟲Web頁面按存在方式可以分為表層網(wǎng)頁(SurfaceWeb)和深層網(wǎng)頁(DeepWeb,也稱InvisibleWebPages或HiddenWeb)。五、開源爬蟲框架/項目開源Web爬蟲紛繁多樣,每一個各具特長,適用于不同場景和用戶需求。下面介紹Python編寫的開源Web爬蟲類型。1.ScrapyScrapy是一種高速的高層Web爬取和Web采集框架,可用于爬取網(wǎng)站頁面,并從頁面中抽取結(jié)構(gòu)化數(shù)據(jù)。2.ColaCola是一種高層分布式爬取框架,實現(xiàn)從網(wǎng)站爬取網(wǎng)頁,并從中抽取結(jié)構(gòu)化數(shù)據(jù)。3.CrawleyCrawley是一種Python爬取和采集框架,意在簡化開發(fā)人員從Web網(wǎng)頁抽取數(shù)據(jù)到數(shù)據(jù)庫等結(jié)構(gòu)化存儲中。4.MechanicalSoupMechanicalSoup是一種設計模擬人類使用Web瀏覽器行為的Python軟件庫,它基于解析軟件庫BeautifulSoup構(gòu)建。5.PySpiderPySpider是一種Python編寫的強大Web爬蟲。它支持JavaScript網(wǎng)頁,并具有分布式架構(gòu)。6.PortiaPortia是由Scrapinghub創(chuàng)建的一種可視化爬取工具,它不需要用戶具有任何程序開發(fā)知識。7.BeautifulsoupBeautifulSoup一種設計用于實現(xiàn)Web爬取等快速數(shù)據(jù)獲取項目的Python軟件庫。8.Spidy爬蟲Spidy是一種從命令行運行的Web爬蟲。易于使用。9.GarbGrab是一種用于構(gòu)建爬蟲的Python框架。任務2HTTP協(xié)議任務引入了解了爬蟲的原理,小白還是對Python爬蟲無處下手,覺得手動使用瀏覽器搜索簡單,使用編程進行操作無法理解。不清楚如何模擬,什么是瀏覽器。為了解決上面的問題,需要引入HTTP協(xié)議這個概念,了解這些定義,才能知道如何模擬瀏覽器。知識準備HTTP協(xié)議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面?zhèn)魉徒o客戶端。HTTP協(xié)議采用了請求/響應模型。客戶端向服務器發(fā)送一個請求報文,請求報文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務器以一個狀態(tài)行作為響應,響應的內(nèi)容包括協(xié)議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數(shù)據(jù)。一、HTTP協(xié)議工作原理HTTP協(xié)議是HyperTextTransferProtocol(超文本傳輸協(xié)議)的縮寫,是用于從萬維網(wǎng)(WWW:WorldWideWeb)服務器傳輸超文本到本地瀏覽器的傳送協(xié)議。HTTPS(全稱:HypertextTransferProtocoloverSecureSocketLayer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。URL協(xié)議中最常用的是HTTP協(xié)議,它是目前www中應用最廣的協(xié)議。按照HTTP協(xié)議進行劃分,爬蟲的工作流程如圖所示。爬蟲的工作流程HTTP協(xié)議工作原理HTTP請求/響應的步驟如下:1.客戶端連接到Web服務器2.發(fā)送HTTP請求3.服務器接受請求并返回HTTP響應4.釋放連接TCP連接5.客戶端瀏覽器解析HTML內(nèi)容二、Urllib模塊庫Urllib模塊是一個高級的web交流庫,其核心功能就是模仿web瀏覽器等客戶端,去請求相應的資源,并返回一個類文件對象。Urllib支持各種web協(xié)議,例如:HTTP、FTP、Gopher;同時也支持對本地文件進行訪問。三、URL定義URI

是UniversalResourceIdentifier(通用資源標識符)的縮寫,Web上每種可用的資源,如HTML文檔、圖像、視頻片段、程序等都有這樣一個唯一通用標識符進行定位。URL是URI的一個子集,是UniformResourceLocator的縮寫(統(tǒng)一資源定位符),URL是Internet上描述信息資源的字符串,主要用在各種www客戶程序和服務器上。采用URL可以用一種統(tǒng)一的格式來描述各種信息資源,包括文件、服務器的地址和目錄等。網(wǎng)頁與網(wǎng)址關系如圖所示,網(wǎng)址是爬蟲獲取數(shù)據(jù)的基本依據(jù)。因此,爬蟲爬取數(shù)據(jù)時必須要有一個目標的URL才可以獲取數(shù)據(jù),1.網(wǎng)址格式簡單的說,網(wǎng)頁地址URL是由符合一定格式的字符串組成。常見URL協(xié)議2.拆分URLurlparse函數(shù)可以將一個URL字符串分解成6個元素,即addressingscheme、networdlocation、path、parameters、query、fragmentidentifier案例——圖片網(wǎng)址URL拆分在瀏覽器中搜索圖所示的貓,網(wǎng)址為/images/search?view=detailV2&ccid=iQzwAgAY&id=92C992AD902F97FE5AE85BFC4935CDF2911AA429&thid=OIP.iQzwAgAYTTOpvtYvklm_wwHaLH&mediaurl=https%3a%2f%2%2fcommunity%2f017d275d39117da8012187f4538e0e.jpg%401280w_1l_2o_100sh.jpg&exph=1920&expw=1280&q=%e7%8c%ab&simid=608000265040629969&FORM=IRPRST&ck=5DD0FC57B49AD8BAE607F6CA5341C66E&selectedIndex=0&ajaxhist=0&ajaxserp=0,對其進行拆分。3.拼接URL在進行網(wǎng)絡爬蟲時,經(jīng)常會遇到需要把一個域名和網(wǎng)址路徑進行拼接的操作。除了使用“+”,還可以利用其他方法進行網(wǎng)址URL拼接。(1)拼接URL(2)拼接兩個URL案例——房地產(chǎn)信息網(wǎng)網(wǎng)址拼接房地產(chǎn)信息網(wǎng)首頁全部房源網(wǎng)址為/,如圖所示,小區(qū)房源網(wǎng)址為community.html,通過函數(shù)拼接小區(qū)房源網(wǎng)址。小區(qū)房地產(chǎn)信息網(wǎng)四、URL編碼設置對于簡短的網(wǎng)址URL可以使用引號或單引號直接定義,對于長而復雜的網(wǎng)址URL,可以使用加號進行拼接。網(wǎng)址拼接不是簡單的字符串拼接,需要進行編碼轉(zhuǎn)換。1.編碼函數(shù)字符串被當作url提交時會被自動進行url編碼處理,url中有些字符會引起歧義。因此,當url地址含有中文或者“/”時,需要使用編碼函數(shù)進行轉(zhuǎn)換,(1)urlencode函數(shù)案例——輸出編碼網(wǎng)址通過百度首頁網(wǎng)址打開網(wǎng)頁,找到2022年冬奧會新聞,如圖所示,輸出該網(wǎng)頁的網(wǎng)址:/s?id=1722893204544011795&wfr=spider&for=pc(2)quote函數(shù)若是需要對單一的字符串進行轉(zhuǎn)化,可以使用urllib.quote函數(shù)(3)quote_plus函數(shù)quote_plus函數(shù)比quote多一些功能案例——網(wǎng)址編碼按照標準,URL只允許一部分ASCII字符,其他字符(如漢字)是不符合標準的,但在構(gòu)造URL的過程中有時要使用到中文,此時就要進行編碼。2.解碼函數(shù)與urlencode或quote等編碼函數(shù)對應的是解碼函數(shù)unquote函數(shù),在進行解碼時,根據(jù)編碼的不同,解碼也略有不同。對應中文在gbk下的編碼,所謂的解碼就是把字符串轉(zhuǎn)成gbk編碼,然后把\x替換成%。對應中文在是utf8下的編碼,那么需要把結(jié)果再轉(zhuǎn)成utf8輸出,否則顯示亂碼。案例——網(wǎng)址編碼與解碼對CCTV節(jié)目官網(wǎng)網(wǎng)址為/,對其進行編碼與解碼。任務3網(wǎng)頁請求過程任務引入了解了網(wǎng)頁與HTTP協(xié)議的定義,小白對模擬瀏覽器發(fā)送網(wǎng)絡請求的過程有了大概了解,但是對使用Python進行操作還是一頭霧水,不清楚如何使用Python模擬?如何模擬瀏覽器發(fā)送網(wǎng)絡請求?知識準備網(wǎng)頁請求的過程分為兩個環(huán)節(jié),如圖所示:Request(請求):每一個展示在用戶面前的網(wǎng)頁都必須經(jīng)過這一步,也就是向服務器發(fā)送訪問請求。Response(響應):服務器在接收到用戶的請求后,會驗證請求的有效性,然后向用戶(客戶端)發(fā)送響應的內(nèi)容,客戶端接收服務器響應的內(nèi)容,將內(nèi)容展示出來,就是網(wǎng)頁請求。一、發(fā)送請求報文發(fā)送請求實質(zhì)上是指發(fā)送請求報文的過程。請求報文包括以下四個方面:請求行(requestline)、請求頭(header)、空行和請求體1.請求行請求行由請求方法、請求URL和HTTP協(xié)議版本3個字段組成,字段間使用空格分隔。(1)請求方法:請求方法是指對目標資源的操作方式,常見的有GET方法和POST方法。根據(jù)HTTP標準,HTTP請求可以使用多種請求方法。①HTTP1.0定義了三種請求方法:GET,POST和HEAD方法。(2)請求URL:請求URL是指目標網(wǎng)站的統(tǒng)一資源定位符(UniformResourceLocator,URL)(3)HTTP協(xié)議版本:HTTP協(xié)議是指通信雙方在通信流程和內(nèi)容格式上共同遵守的標準2.請求頭請求頭中存儲的是該請求的一些主要說明,服務器據(jù)此獲取客戶端的信息。3.空行空行標志著請求頭的結(jié)束4.請求體請求體表示根據(jù)不同的請求方法包含不同的內(nèi)容,若請求方法為GET,則此項為空;若請求方法為POST,則此項為待提交的數(shù)據(jù)(即表單數(shù)據(jù))。二、返回響應一般情況下,服務器接收并處理客戶端發(fā)過來的請求后會返回一個HTTP的響應。HTTP響應也由四個部分組成,分別是:狀態(tài)行、消息報頭、空行和響應正文下面對上面的參數(shù)進行說明。1.狀態(tài)行:由HTTP協(xié)議版本號、狀態(tài)碼、狀態(tài)消息三部分組成。2.消息報頭:說明客戶端要使用的一些附加信息,第二行和第三行為消息報頭,Date:生成響應的日期和時間;Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8。3.空行:消息報頭后面必須是空行。4.響應正文:服務器返回給客戶端的文本信息,空行后面的html部分為響應正文。三、HTTP消息HTTP消息由客戶端到服務器的請求和服務器到客戶端的響應組成。請求消息和響應消息都是由開始行(對于請求消息,開始行就是請求行;對于響應消息,開始行就是狀態(tài)行),消息報頭、空行、消息正文組成。HTTP消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。每一個報頭域都是由名字+“:”+空格+值組成,消息報頭域的名字是大小寫無關。1.普通報頭在普通報頭中,有少數(shù)報頭域用于所有的請求和響應消息,但并不用于被傳輸?shù)膶嶓w,只用于傳輸?shù)南ⅰ3S玫钠胀▓箢^如下:(1)Cache-Control:(2)Date:(3)Connection2.請求報頭請求報頭允許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。常用的請求報頭域如下:(1)Accept:用于指定客戶端接受哪些類型的信息。(2)Accept-Charset:用于指定客戶端接受的字符集。默認可以接受任何字符集。(3)Accept-Encoding:類似于Accept,用于指定可接受的內(nèi)容編碼(4)Accept-Language:用于指定一種自然語言。Accept-Language:zh-cn.設置設置i只能接受中文。(5)Authorization:用于證明客戶端有權(quán)查看某個資源。(6)Host:用于指定被請求資源的Internet主機和端口號,它通常從HTTPURL中提取出來的。(7)User-Agent:列出操作系統(tǒng)的名稱和版本、使用的瀏覽器的名稱和版本。3.響應報頭響應報頭允許服務器傳遞不能放

溫馨提示

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

提交評論