爬虫概念
1.什么是爬蟲(chóng)。
互聯(lián)網(wǎng):由網(wǎng)絡(luò)設(shè)備(網(wǎng)線,路由器,交換機(jī),防火墻)和一臺(tái)臺(tái)計(jì)算機(jī)連接而成,像一張網(wǎng)一樣。
互聯(lián)網(wǎng)建立目的:互聯(lián)網(wǎng)的核心價(jià)值在與數(shù)據(jù)的共享/傳遞:數(shù)據(jù)是存放在一臺(tái)臺(tái)機(jī)器上,將計(jì)算機(jī)聯(lián)到一起的目的為了能方便彼此之間的數(shù)據(jù)共享/傳遞,否則你只能拿U盤去別人的計(jì)算機(jī)上拷貝數(shù)據(jù)。
爬蟲(chóng)概念
爬蟲(chóng)就是通過(guò)編寫程序模擬瀏覽器上網(wǎng),然后讓其去互聯(lián)網(wǎng)上抓取數(shù)據(jù)的過(guò)程。
爬蟲(chóng)分類
-
通用爬蟲(chóng):爬取整個(gè)頁(yè)面源碼數(shù)據(jù),抓取數(shù)據(jù)
-
聚焦爬蟲(chóng):爬取一個(gè)頁(yè)面中局部的數(shù)據(jù)(數(shù)據(jù)解析),也就是有用的數(shù)據(jù)
-
增量式爬蟲(chóng):用于檢測(cè)網(wǎng)站數(shù)據(jù)更新的情況,從而爬取網(wǎng)站中最新更新出來(lái)的數(shù)據(jù)
爬蟲(chóng)意義
互聯(lián)網(wǎng)中最有價(jià)值的便是數(shù)據(jù),比如天貓商城的商品信息,鏈家網(wǎng)的租房信息,雪球網(wǎng)的證券投資信息等等,這些數(shù)據(jù)都代表了各個(gè)行業(yè)的真金白銀,可以說(shuō),誰(shuí)掌握了行業(yè)內(nèi)的第一手?jǐn)?shù)據(jù),誰(shuí)就成了整個(gè)行業(yè)的主宰。
robots.txt協(xié)議
如果自己的門戶網(wǎng)站中的指定頁(yè)面中的數(shù)據(jù)不想讓爬蟲(chóng)程序爬取到的話,那么則可以通過(guò)編寫一個(gè)robots.txt的協(xié)議文件來(lái)約束爬蟲(chóng)程序的數(shù)據(jù)爬取。robots協(xié)議的編寫格式可以觀察淘寶網(wǎng)的robots(訪問(wèn)www.taobao.com/robots.txt即可)。
但是需要注意的是,該協(xié)議只是相當(dāng)于口頭的協(xié)議,并沒(méi)有使用相關(guān)技術(shù)進(jìn)行強(qiáng)制管制,所以該協(xié)議是防君子不防小人。但是我們?cè)趯W(xué)習(xí)爬蟲(chóng)階段編寫的爬蟲(chóng)程序可以先忽略robots協(xié)議。
反爬蟲(chóng)
門戶網(wǎng)站通過(guò)相應(yīng)的策略和技術(shù)手段,防止爬蟲(chóng)程序進(jìn)行網(wǎng)站數(shù)據(jù)的爬取。
反反爬蟲(chóng)
爬蟲(chóng)程序通過(guò)相應(yīng)的策略和技術(shù)手段,破解門戶網(wǎng)站的反爬蟲(chóng)手段,從而爬取到相應(yīng)的數(shù)據(jù)。
2.爬蟲(chóng)的基本流程。
1.發(fā)起請(qǐng)求:
使用http庫(kù)向目標(biāo)站點(diǎn)發(fā)起請(qǐng)求,即發(fā)送一個(gè)request,包含:請(qǐng)求頭、請(qǐng)求體
2.獲取相應(yīng)內(nèi)容:
如果服務(wù)器能正常響應(yīng),則會(huì)得到一個(gè)Response,包含:html,json,圖片,視頻
3.解析內(nèi)容:
解析html數(shù)據(jù):正則表達(dá)式,第三方解析庫(kù)如Beautiful,xpath,pyquery等。
解析json數(shù)據(jù):json模塊
解析二進(jìn)制數(shù)據(jù):以b的方式寫入文件
4.保存數(shù)據(jù)
數(shù)據(jù)庫(kù),文件
3.request請(qǐng)求
1.請(qǐng)求方式
常用請(qǐng)求方式:GET,POST
其他請(qǐng)求方式:HEAD,PUT,DELETE,OPTHONS
post與get請(qǐng)求最終都會(huì)拼接成這種形式:k1=xxx&k2=yyy&k3=zzz
-
post請(qǐng)求的參數(shù)放在請(qǐng)求體內(nèi):可用瀏覽器查看,存放于form data內(nèi)。
-
get請(qǐng)求的參數(shù)直接放在url后。
2.請(qǐng)求url
url全稱統(tǒng)一資源定位符,如一個(gè)網(wǎng)頁(yè)文檔,一張圖片,一個(gè)視頻等都可以用url唯一來(lái)確定。
網(wǎng)頁(yè)的加載過(guò)程是:?加載一個(gè)網(wǎng)頁(yè),通常都是先加載document文檔,在解析document文檔的時(shí)候,遇到鏈接,則針對(duì)超鏈接發(fā)起下載圖片的請(qǐng)求。
3.請(qǐng)求頭
User-Agent:請(qǐng)求載體的身份標(biāo)識(shí)
Connection:close連接方式
content-type:響應(yīng)數(shù)據(jù)類型
Referer:上一次的跳轉(zhuǎn)路徑
4.請(qǐng)求體
如果是get方式,請(qǐng)求體沒(méi)有內(nèi)容。
如果是post方式,請(qǐng)求體是format data。
-
登錄窗口,文件上傳等,信息都會(huì)被附加到請(qǐng)求體內(nèi)
-
登錄,輸入錯(cuò)誤的用戶名密碼,然后提交,就可以看到post,正確登錄后頁(yè)面通常會(huì)跳轉(zhuǎn),無(wú)法捕捉到post
4.Response響應(yīng)
1.響應(yīng)狀態(tài)
-
200:代表成功
-
301:代表跳轉(zhuǎn)
-
404:文件不存在
-
403:權(quán)限
-
502:服務(wù)器錯(cuò)誤
2.Response header
-
location:跳轉(zhuǎn)
-
set-cookie:可能有多個(gè),告訴瀏覽器,把cookie保存下來(lái)
3.preview
最主要的部分,包含了請(qǐng)求資源的內(nèi)容,如html,圖片等
二、http協(xié)議相關(guān)
http協(xié)議更多相信見(jiàn)
這里就簡(jiǎn)單回顧一下。
1.http協(xié)議
1.官方概念:HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬(wàn)維網(wǎng)(WWW:World Wide Web )服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。聽(tīng)爛了的概念
2.自述概念:HTTP協(xié)議就是服務(wù)器(Server)和客戶端(Client)之間進(jìn)行數(shù)據(jù)交互(相互傳輸數(shù)據(jù))的一種形式。
2.http協(xié)議工作原理
HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上。瀏覽器作為HTTP客戶端通過(guò)URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請(qǐng)求。Web服務(wù)器根據(jù)接收到的請(qǐng)求后,向客戶端發(fā)送響應(yīng)信息。
3.http之url
HTTP使用統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifiers, URI)來(lái)傳輸數(shù)據(jù)和建立連接。URL是一種特殊類型的URI,包含了用于查找某個(gè)資源的足夠的信息
URL,全稱是UniformResourceLocator, 中文叫統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上用來(lái)標(biāo)識(shí)某一處資源的地址。以下面這個(gè)URL為例,介紹下普通URL的各部分組成:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的URL可以看出,一個(gè)完整的URL包括以下幾部分:
-
協(xié)議部分:該URL的協(xié)議部分為“http:”,這代表網(wǎng)頁(yè)使用的是HTTP協(xié)議。在Internet中可以使用多種協(xié)議,如HTTP,FTP等等本例中使用的是HTTP協(xié)議。在"HTTP"后面的“//”為分隔符
-
域名部分:該URL的域名部分為“www.aspxfans.com”。一個(gè)URL中,也可以使用IP地址作為域名使用
-
端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個(gè)URL必須的部分,如果省略端口部分,將采用默認(rèn)端口
-
虛擬目錄部分:從域名后的第一個(gè)“/”開(kāi)始到最后一個(gè)“/”為止,是虛擬目錄部分。虛擬目錄也不是一個(gè)URL必須的部分。本例中的虛擬目錄是“/news/”
-
文件名部分:從域名后的最后一個(gè)“/”開(kāi)始到“?”為止,是文件名部分,如果沒(méi)有“?”,則是從域名后的最后一個(gè)“/”開(kāi)始到“#”為止,是文件部分,如果沒(méi)有“?”和“#”,那么從域名后的最后一個(gè)“/”開(kāi)始到結(jié)束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個(gè)URL必須的部分,如果省略該部分,則使用默認(rèn)的文件名
-
錨部分:從“#”開(kāi)始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個(gè)URL必須的部分
-
參數(shù)部分:從“?”開(kāi)始到“#”為止之間的部分為參數(shù)部分,又稱搜索部分、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”。參數(shù)可以允許有多個(gè)參數(shù),參數(shù)與參數(shù)之間用“&”作為分隔符。
三、https協(xié)議相關(guān)
1.https協(xié)議
1.官方概念:HTTPS (Secure Hypertext Transfer Protocol)安全超文本傳輸協(xié)議,HTTPS是在HTTP上建立SSL加密層,并對(duì)傳輸數(shù)據(jù)進(jìn)行加密,是HTTP協(xié)議的安全版。
2.自述概念:加密安全版的http協(xié)議
2.https加密技術(shù)
1.ssl對(duì)稱加密技術(shù)
SSL采用的加密技術(shù)叫做“共享密鑰加密”,也叫作“對(duì)稱密鑰加密”。
加密過(guò)程:
客戶端向服務(wù)器發(fā)送一條信息,首先客戶端會(huì)采用已知的算法對(duì)信息進(jìn)行加密,比如MD5或者Base64加密,接收端對(duì)加密的信息進(jìn)行解密的時(shí)候需要用到密鑰,中間會(huì)傳遞密鑰,(加密和解密的密鑰是同一個(gè)),密鑰在傳輸中間是被加密的。
缺點(diǎn):
這種方式看起來(lái)安全,但是仍有潛在的危險(xiǎn),一旦被竊聽(tīng),或者信息被挾持,就有可能破解密鑰,而破解其中的信息。因此“共享密鑰加密”這種方式存在安全隱患
2.非對(duì)稱加密技術(shù)
加密過(guò)程:
“非對(duì)稱加密”使用的時(shí)候有兩把鎖,一把叫做“私有密鑰”,一把是“公開(kāi)密鑰”,使用非對(duì)象加密的加密方式的時(shí)候,服務(wù)器首先告訴客戶端按照自己給定的公開(kāi)密鑰進(jìn)行加密處理,客戶端按照公開(kāi)密鑰加密以后,服務(wù)器接受到信息再通過(guò)自己的私有密鑰進(jìn)行解密,這樣做的好處就是解密的鑰匙根本就不會(huì)進(jìn)行傳輸,因此也就避免了被挾持的風(fēng)險(xiǎn)。
就算公開(kāi)密鑰被竊聽(tīng)者拿到了,它也很難進(jìn)行解密,因?yàn)榻饷苓^(guò)程是對(duì)離散對(duì)數(shù)求值,這可不是輕而易舉就能做到的事。
缺點(diǎn):
-
如何保證接收端向發(fā)送端發(fā)出公開(kāi)秘鑰的時(shí)候,發(fā)送端確保收到的是預(yù)先要發(fā)送的,而不會(huì)被挾持。只要是發(fā)送密鑰,就有可能有被挾持的風(fēng)險(xiǎn)。
-
非對(duì)稱加密的方式效率比較低,它處理起來(lái)更為復(fù)雜,通信過(guò)程中使用就有一定的效率問(wèn)題而影響通信速度
3.https證書機(jī)制
數(shù)字證書認(rèn)證機(jī)構(gòu)是客戶端與服務(wù)器都可信賴的第三方機(jī)構(gòu)。
證書的具體傳播過(guò)程如下:
-
服務(wù)器的開(kāi)發(fā)者攜帶公開(kāi)密鑰,向數(shù)字證書認(rèn)證機(jī)構(gòu)提出公開(kāi)密鑰的申請(qǐng),數(shù)字證書認(rèn)證機(jī)構(gòu)在認(rèn)清申請(qǐng)者的身份,審核通過(guò)以后,會(huì)對(duì)開(kāi)發(fā)者申請(qǐng)的公開(kāi)密鑰做數(shù)字簽名,然后分配這個(gè)已簽名的公開(kāi)密鑰,并將密鑰放在證書里面,綁定在一起。
-
服務(wù)器將這份數(shù)字證書發(fā)送給客戶端,因?yàn)榭蛻舳艘舱J(rèn)可證書機(jī)構(gòu),客戶端可以通過(guò)數(shù)字證書中的數(shù)字簽名來(lái)驗(yàn)證公鑰的真?zhèn)?#xff0c;來(lái)確保服務(wù)器傳過(guò)來(lái)的公開(kāi)密鑰是真實(shí)的。一般情況下,證書的數(shù)字簽名是很難被偽造的,這取決于認(rèn)證機(jī)構(gòu)的公信力。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yhq123/p/11300140.html
總結(jié)
- 上一篇: 正则表达式限制文本框只能输入数字,小数点
- 下一篇: mysql获取行号