您好,登錄后才能下訂單哦!
這篇文章主要介紹“網(wǎng)絡(luò)爬蟲的原理介紹”,在日常操作中,相信很多人在網(wǎng)絡(luò)爬蟲的原理介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”網(wǎng)絡(luò)爬蟲的原理介紹”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
大家對瀏覽器應(yīng)該一點都不陌生,可以說,只要上過網(wǎng)的人都知道瀏覽器??墒牵靼诪g覽器各種原理的人可不一定多。
作為要開發(fā)爬蟲的小伙伴,是一定一定要明白瀏覽器的工作原理的。這是你寫爬蟲的必備工具,別無他。
大家在面試的時候,有沒有遇到這么一個非常宏觀而又處處細節(jié)的解答題:
請說說從你在瀏覽器地址欄輸入網(wǎng)站到你看到網(wǎng)頁中間都發(fā)生了什么?
這真是一個考驗知識面的題啊,經(jīng)驗老道的老猿既可以滔滔不絕的講上三天三夜,也可以提煉出幾分鐘的精華講個大概。大家恐怕對整個過程就一知半解了。
巧的是,對這個問題理解的越透徹,越對寫爬蟲有幫助。換句話說,爬蟲是一個考驗綜合技能的領(lǐng)域。那么,大家準備好迎接這個綜合技能挑戰(zhàn)了嗎?
廢話不多說,我們就從解答這個題目開始,認識瀏覽器和服務(wù)器,看看這中間有哪些知識是爬蟲要用到的。
前面也說過,這個問題可以講上三天三夜,但我們沒那么多時間,其中一些細節(jié)就略過,把大致流程結(jié)合爬蟲講一講,分成三部分:
瀏覽器發(fā)出請求
服務(wù)器做出響應(yīng)
瀏覽器接收響應(yīng)
在瀏覽器地址欄輸入網(wǎng)址后回車,瀏覽器請服務(wù)器提出網(wǎng)頁請求,也就是告訴服務(wù)器,我要看你的某個網(wǎng)頁。
上面短短一句話,蘊藏了無數(shù)玄機啊,讓我不得不費點口舌一一道來。主要講述:
網(wǎng)址是不是有效的?
服務(wù)器在哪里?
瀏覽器向服務(wù)器發(fā)送了些什么?
服務(wù)器返回了些什么?
首先,瀏覽器要判斷你輸入的網(wǎng)址(URL)是否合法有效。對應(yīng)URL,小猿們并不陌生吧,以http(s)開頭的那一長串的字符,但是你知道它還可以以ftp, mailto, file, data, irc開頭嗎?下面是它最完整的語法格式:
URI = scheme:[//authority]path[?query][#fragment] # 其中, authority 又是這樣的: authority = [userinfo@]host[:port] # userinfo可以同時包含user name和password,以:分割 userinfo = [user_name:password]
用圖更形象的表現(xiàn)處理就是這樣的:
經(jīng)驗之談:要判斷URL的合法性
Python里面可以用urllib.parse來進行URL的各種操作
In [1]: import urllib.parse In [2]: url = 'http://dachong:the_password@www.yuanrenxue.com/user/info?page=2' In [3]: zz = urllib.parse.urlparse(url) Out[4]: ParseResult(scheme='http', netloc='dachong:the_password@www.yuanrenxue.com', path='/user/info', params='', query='page=2', fragment='')
我們看到,urlparse函數(shù)把URL分析成了6部分:
scheme://netloc/path;params?query#fragment
需要主要的是 netloc 并不等同于 URL 語法定義中的host
上面URL定義中的host,就是互聯(lián)網(wǎng)上的一臺服務(wù)器,它可以是一個IP地址,但通常是我們所說的域名。域名通過DNS綁定到一個(或多個)IP地址上。瀏覽器要訪問某個域名的網(wǎng)站就要先通過DNS服務(wù)器解析域名,得到真實的IP地址。
這里的域名解析一般是由操作系統(tǒng)完成的,爬蟲不需要關(guān)心。然而,當(dāng)你寫一個大型爬蟲,像Google、百度搜索引擎那樣的爬蟲的時候,效率變得很主要,爬蟲就要維護自己的DNS緩存。
老猿經(jīng)驗:大型爬蟲要維護自己的DNS緩存
瀏覽器獲得了網(wǎng)站服務(wù)器的IP地址,就可以向服務(wù)器發(fā)送請求了。這個請求就是遵循h(huán)ttp協(xié)議的。寫爬蟲需要關(guān)心的就是http協(xié)議的headers,下面是訪問 en.wikipedia.org/wiki/URL 時瀏覽器發(fā)送的請求 headers:
可能已經(jīng)從圖中看出來些端倪,發(fā)送的http請求頭是類似一個字典的結(jié)構(gòu):
authority: 就是訪問的目標(biāo)機器;
method: http請求的方法有很多:
GET
HEAD
POST
PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH
一般,爬蟲使用最多的是GET和POST
path: 訪問的網(wǎng)站的路徑
scheme: 請求的協(xié)議類型,這里是https
accept: 能夠接受的回應(yīng)內(nèi)容類型(Content-Types)
accept-encoding: 能夠接受的編碼方式列表
accept-language: 能夠接受的回應(yīng)內(nèi)容的自然語言列表
cache-control: 指定在這次的請求/響應(yīng)鏈中的所有緩存機制 都必須 遵守的指令
cookie: 之前由服務(wù)器通過 Set- Cookie發(fā)送的一個 超文本傳輸協(xié)議Cookie
這是爬蟲很關(guān)心的一個東東,登錄信息都在這里。
upgrade-insecuree-requests: 非標(biāo)準請求字段,可忽略之。
user-agent: 瀏覽器身份標(biāo)識
這也是爬蟲很關(guān)心的部分。比如,你需要得到手機版頁面,就要設(shè)置瀏覽器身份標(biāo)識為手機瀏覽器的user-agent。
經(jīng)驗之談: 通過設(shè)置headers跟服務(wù)器溝通
如果我們在瀏覽器地址欄輸入一個網(wǎng)頁網(wǎng)址(不是文件下載地址),回車后,很快就看到了一個網(wǎng)頁,里面包含排版文字、圖片、視頻等數(shù)據(jù),是一個豐富內(nèi)容格式的頁面。然而,我通過瀏覽器查看源代碼,看到的卻是一對文本格式的html代碼。
沒錯,就是一堆的代碼,卻讓瀏覽器給渲染成了漂亮的網(wǎng)頁。這對代碼里面有:
css: 瀏覽器根據(jù)它來排版,安排文字、圖片等的位置;
JavaScript: 瀏覽器運行它可以讓用戶和網(wǎng)頁交互;
圖片等鏈接: 瀏覽器再去下載這些鏈接,最終渲染成網(wǎng)頁。
而我們想要爬取的信息就藏在html代碼中,我們可以通過解析方法提取其中我們想要的內(nèi)容。如果html代碼里面沒有我們想要的數(shù)據(jù),但是在網(wǎng)頁里面卻看到了,那就是瀏覽器通過ajax請求異步加載(偷偷下載)了那部分數(shù)據(jù)。
這個時候,我們就要通過觀察瀏覽器的加載過程來發(fā)現(xiàn)具體是哪個ajax請求加載了我們需要的數(shù)據(jù)。
到此,關(guān)于“網(wǎng)絡(luò)爬蟲的原理介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。