下方查看歷史精選文章 大數(shù)據(jù)測試過程、策略及挑戰(zhàn) Python適合在諸多領(lǐng)域的應(yīng)用,作為軟件測試從業(yè)者,具備一定的自動(dòng)化測試基礎(chǔ),再去開展Python爬蟲工程應(yīng)用是更加有優(yōu)勢的。 本系列《Python爬蟲應(yīng)用指南》為筆者結(jié)合多年自動(dòng)化測試實(shí)踐,結(jié)合未來自動(dòng)化測試發(fā)展而編寫的系列文章,主要梳理筆者在學(xué)習(xí)和工作中實(shí)踐爬蟲技術(shù)的精華集合。 本文主要從以下幾個(gè)方面來說明基于Python實(shí)踐爬蟲技術(shù):
HTTP協(xié)議基礎(chǔ) 你可以通過之前發(fā)布的《從零開始理解HTTP協(xié)議及報(bào)文分析》來深入學(xué)習(xí)HTTP協(xié)議,這篇文章有助于你從HTTP機(jī)制和報(bào)文結(jié)構(gòu)方面深入理解什么是HTTP協(xié)議。 本節(jié)就HTTP2.0進(jìn)行介紹,方便大家進(jìn)一步了解HTTP的發(fā)展歷史和特性。 HTTP2.0發(fā)布于2015年,相對HTTP1.1來說,HTTP2.0更快、更簡單、更穩(wěn)定。尤其是在傳輸層做了大量的優(yōu)化,HTTP2.0的主要目標(biāo)是:改進(jìn)傳輸性能,實(shí)現(xiàn)低延遲和高吞吐量。 由于HTTP2.0內(nèi)部實(shí)現(xiàn)了新的二進(jìn)制分幀層,與之前的HTTP1.0/HTTP1.2不兼容了,這個(gè)是大家要重點(diǎn)注意的地方。 二進(jìn)制分幀層 HTTP2.0的核心特性就在于這個(gè)新實(shí)現(xiàn)的二進(jìn)制分幀層,在HTTP1.X中,不管是請求(request)還是響應(yīng)(response),都是基于文本格式傳輸?shù)?,而且其頭部(headers)和實(shí)體(body)之間是通過換行符進(jìn)行分割的,而HTTP2.0則進(jìn)行了優(yōu)化改進(jìn),將文本傳輸模式改為了二進(jìn)制格式,由于二進(jìn)制格式利用率更高,組織方式更加靈活,使得在HTTP2.0中,解析起來更加高效,同時(shí)將請求(request)/響應(yīng)(response)數(shù)據(jù)分割為更小的幀,并均采用二進(jìn)制編碼。 在這里需要大家了解幾個(gè)概念:
在HTTP2.0中,同域名下的所有通信都可以在單個(gè)連接上完成(注:在HTTP1.X中,有多個(gè)連接,這是二則的表現(xiàn)區(qū)別,大家注意一下),該連接可以承載任意任意的雙向數(shù)據(jù)流。 數(shù)據(jù)流是用于承載雙向消息的通道,每條消息都是一條邏輯HTTP消息,例如請求或響應(yīng),可以包含一個(gè)或多個(gè)幀。 簡而言之,HTTP2.0將HTTP協(xié)議通信分解為二進(jìn)制編碼的交換,這些幀對應(yīng)著特定的數(shù)據(jù)流中的消息,所有這些均在一個(gè)連接上復(fù)用。 大家可以通過下圖看看HTTP1.X和HTTP2.0的區(qū)別: 本圖來源于網(wǎng)絡(luò) Web頁面結(jié)構(gòu) 在我們用不同的瀏覽器訪問不同的網(wǎng)站時(shí),呈現(xiàn)出樣式各樣的頁面,你有沒有想過為什么會(huì)這樣呢?在本節(jié)我們將介紹網(wǎng)頁的組成、結(jié)構(gòu)等內(nèi)容。 一個(gè)網(wǎng)頁的典型構(gòu)成,一般分為三個(gè)部分:HTML、CSS和javascript。打個(gè)簡單的比喻HTML相當(dāng)于人體骨架、javascript相當(dāng)于強(qiáng)健的肌肉、css相當(dāng)于皮膚,這三種結(jié)合一起就構(gòu)成了一個(gè)完美的網(wǎng)頁。 下面我們看一個(gè)基本的網(wǎng)頁構(gòu)成源碼。 看著有點(diǎn)小復(fù)雜,我們簡化下,其結(jié)構(gòu)源碼如下
上面這個(gè)結(jié)構(gòu),需要大家閉著眼也要能掌握。對于html更多的tag名稱及作用需要大家進(jìn)一步通過其他資料學(xué)習(xí),推薦一部書 對于爬蟲和自動(dòng)化測試應(yīng)用大家需要重點(diǎn)掌握以下幾個(gè)方面的知識(shí): - 網(wǎng)頁的結(jié)構(gòu) - 節(jié)點(diǎn)樹及節(jié)點(diǎn)間的關(guān)系 - 選擇器(xpath、css選擇器) 這里推薦幾篇過往的文章,如下: 在Selenium Webdriver中使用XPath Contains、Sibling函數(shù)定位 selenium使用Xpath+CSS+JavaScript+jQuery的定位方法 - 專治各種定位不準(zhǔn)并發(fā)癥 爬蟲基本原理 在應(yīng)用爬蟲進(jìn)行實(shí)踐前,需要掌握爬蟲的基本原理和過程。簡單講,爬蟲就是獲取網(wǎng)頁并提取和保存信息的自動(dòng)化程序。 理解了上面這句簡單的話,我們大概就知道了爬蟲基本原理和過程如下: 1. 獲取目標(biāo)網(wǎng)頁 2. 提取目標(biāo)網(wǎng)頁中的目標(biāo)信息 3. 保存目標(biāo)數(shù)據(jù) 4. 自動(dòng)化完成上述步驟 Session和Cookie基礎(chǔ) 在瀏覽網(wǎng)頁時(shí),我們經(jīng)常碰到網(wǎng)頁需要登錄的情況,很多頁面都需要登錄獲取權(quán)限后才能進(jìn)行訪問,這個(gè)時(shí)候就需要涉及Cookie、Session知識(shí)了。在本節(jié)我們簡要的介紹下它們。 session,中文稱之為會(huì)話,其本義指在貫穿瀏覽過程中的一系列動(dòng)作、消息。例如打開瀏覽器、瀏覽網(wǎng)頁、關(guān)閉瀏覽器。 而在web中,Session對象用例存儲(chǔ)特定用戶Session所需的屬性、配置信息。這樣當(dāng)前用戶才能在不同頁面之間跳轉(zhuǎn)時(shí),存儲(chǔ)在Session對象中的變量才不至于丟失。如果在過程中用戶的session丟失或過期時(shí),服務(wù)器就會(huì)中斷該Session,讓你無法繼續(xù)瀏覽該服務(wù)。 而Cookie則是指望著為了鑒別用戶身份,進(jìn)行session跟蹤而存儲(chǔ)在用戶本地的一些信息。 幾個(gè)關(guān)鍵點(diǎn): 1. Session數(shù)據(jù)存儲(chǔ)在服務(wù)端、Cookie數(shù)據(jù)存儲(chǔ)在用戶本地 2. Session不會(huì)因?yàn)楸镜亟K端關(guān)閉(例如瀏覽器關(guān)閉)而丟失 3. Sessio象都是有時(shí)效的,即超過預(yù)定的時(shí)間,會(huì)被服務(wù)器設(shè)置為超時(shí)而失效 代理基本原理 對于爬蟲來講,由于爬蟲的速度較快,因此在爬取過程中可能會(huì)遇到同一個(gè)ip訪問過于頻繁的問題,到導(dǎo)致服務(wù)端禁止該ip進(jìn)行爬取,這會(huì)導(dǎo)致極大的不便,這時(shí)就需要應(yīng)用到代理。 代理,即中轉(zhuǎn)站。設(shè)置代理,即在客戶端與服務(wù)器端中間設(shè)置一座中轉(zhuǎn)的橋,這樣客戶端發(fā)起的請求先發(fā)送至代理服務(wù)器,然后代理服務(wù)器再將信息轉(zhuǎn)發(fā)給服務(wù)器,從而實(shí)現(xiàn)代理的作用。 代理有哪些基本的作用呢? - 突破自身IP的限制,訪問一些平時(shí)訪問不了的信息 - 提高訪問速度 - 隱藏真實(shí)IP 我們按不同的協(xié)議將代理分類如下: - FTP代理 - HTTP代理 - SSL/TLS代理 - RTSP代理 - Telnet代理 - POP3/SMTP代理 - SOCKS代理 本章內(nèi)容就介紹到此,后續(xù)進(jìn)一步開展爬蟲系列的寫作。 |
|