爬蟲相關概念和https加密

1、爬蟲的相關概念

1.什麼是爬蟲

互聯網:由網絡設備(網線,路由器,交換機,防火牆)和一臺臺計算機鏈接而成,像一張網同樣。html

互聯網創建目的:互聯網的核心價值在與數據的共享/傳遞:數據是存放在一臺臺機器上,將計算機聯到一塊兒的目的爲了能方便彼此之間的數據共享/傳遞,不然你只能拿U盤去別人的計算機上拷貝數據。正則表達式

爬蟲概念

爬蟲就是經過編寫程序模擬瀏覽器上網,而後讓其去互聯網上抓取數據的過程。算法

爬蟲分類

  • 通用爬蟲:爬取整個頁面源碼數據,抓取數據數據庫

  • 聚焦爬蟲:爬取一個頁面中局部的數據(數據解析),也就是有用的數據json

  • 增量式爬蟲:用於檢測網站數據更新的狀況,從而爬取網站中最新更新出來的數據瀏覽器

爬蟲意義

互聯網中最有價值的即是數據,好比天貓商城的商品信息,鏈家網的租房信息,雪球網的證券投資信息等等,這些數據都表明了各個行業的真金白銀,能夠說,誰掌握了行業內的第一手數據,誰就成了整個行業的主宰。安全

robots.txt協議

若是本身的門戶網站中的指定頁面中的數據不想讓爬蟲程序爬取到的話,那麼則能夠經過編寫一個robots.txt的協議文件來約束爬蟲程序的數據爬取。robots協議的編寫格式能夠觀察淘寶網的robots(訪問www.taobao.com/robots.txt便可)。服務器

可是須要注意的是,該協議只是至關於口頭的協議,並無使用相關技術進行強制管制,因此該協議是防君子不防小人。可是咱們在學習爬蟲階段編寫的爬蟲程序能夠先忽略robots協議。cookie

反爬蟲

門戶網站經過相應的策略和技術手段,防止爬蟲程序進行網站數據的爬取。網絡

反反爬蟲

爬蟲程序經過相應的策略和技術手段,破解門戶網站的反爬蟲手段,從而爬取到相應的數據。

2.爬蟲的基本流程

1.發起請求:

使用http庫向目標站點發起請求,即發送一個request,包含:請求頭、請求體

2.獲取相應內容:

若是服務器能正常響應,則會獲得一個Response,包含:html,json,圖片,視頻

3.解析內容:

解析html數據:正則表達式,第三方解析庫如Beautiful,xpath,pyquery等。

解析json數據:json模塊

解析二進制數據:以b的方式寫入文件

4.保存數據

數據庫,文件

3.request請求

1.請求方式

經常使用請求方式:GET,POST

其餘請求方式:HEAD,PUT,DELETE,OPTHONS

post與get請求最終都會拼接成這種形式:k1=xxx&k2=yyy&k3=zzz

  • post請求的參數放在請求體內:可用瀏覽器查看,存放於form data內。

  • get請求的參數直接放在url後。

2.請求url

url全稱統一資源定位符,如一個網頁文檔,一張圖片,一個視頻等均可以用url惟一來肯定。

網頁的加載過程是: 加載一個網頁,一般都是先加載document文檔,在解析document文檔的時候,遇到連接,則針對超連接發起下載圖片的請求。

3.請求頭

User-Agent:請求載體的身份標識

Connection:close鏈接方式

content-type:響應數據類型

Referer:上一次的跳轉路徑

4.請求體

若是是get方式,請求體沒有內容。

若是是post方式,請求體是format data。

  • 登陸窗口,文件上傳等,信息都會被附加到請求體內

  • 登陸,輸入錯誤的用戶名密碼,而後提交,就能夠看到post,正確登陸後頁面一般會跳轉,沒法捕捉到post

4.Response響應

1.響應狀態

  • 200:表明成功

  • 301:表明跳轉

  • 404:文件不存在

  • 403:權限

  • 502:服務器錯誤

2.Response header

  • location:跳轉

  • set-cookie:可能有多個,告訴瀏覽器,把cookie保存下來

3.preview

最主要的部分,包含了請求資源的內容,如html,圖片等

2、http協議相關

http協議更多相信見https://www.cnblogs.com/ryxiong-blog/articles/10870684.html

這裏就簡單回顧一下。

1.http協議

1.官方概念:HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。聽爛了的概念

2.自述概念:HTTP協議就是服務器(Server)和客戶端(Client)之間進行數據交互(相互傳輸數據)的一種形式。

2.http協議工做原理

HTTP協議工做於客戶端-服務端架構爲上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。

3.http之url

HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和創建鏈接。URL是一種特殊類型的URI,包含了用於查找某個資源的足夠的信息

URL,全稱是UniformResourceLocator, 中文叫統一資源定位符,是互聯網上用來標識某一處資源的地址。如下面這個URL爲例,介紹下普通URL的各部分組成:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

從上面的URL能夠看出,一個完整的URL包括如下幾部分:

  • 協議部分:該URL的協議部分爲「http:」,這表明網頁使用的是HTTP協議。在Internet中可使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"後面的「//」爲分隔符

  • 域名部分:該URL的域名部分爲「www.aspxfans.com」。一個URL中,也可使用IP地址做爲域名使用

  • 端口部分:跟在域名後面的是端口,域名和端口之間使用「:」做爲分隔符。端口不是一個URL必須的部分,若是省略端口部分,將採用默認端口

  • 虛擬目錄部分:從域名後的第一個「/」開始到最後一個「/」爲止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是「/news/」

  • 文件名部分:從域名後的最後一個「/」開始到「?」爲止,是文件名部分,若是沒有「?」,則是從域名後的最後一個「/」開始到「#」爲止,是文件部分,若是沒有「?」和「#」,那麼從域名後的最後一個「/」開始到結束,都是文件名部分。本例中的文件名是「index.asp」。文件名部分也不是一個URL必須的部分,若是省略該部分,則使用默認的文件名

  • 錨部分:從「#」開始到最後,都是錨部分。本例中的錨部分是「name」。錨部分也不是一個URL必須的部分

  • 參數部分:從「?」開始到「#」爲止之間的部分爲參數部分,又稱搜索部分、查詢部分。本例中的參數部分爲「boardID=5&ID=24618&page=1」。參數能夠容許有多個參數,參數與參數之間用「&」做爲分隔符。

3、https協議相關

1.https協議

1.官方概念:HTTPS (Secure Hypertext Transfer Protocol)安全超文本傳輸協議,HTTPS是在HTTP上創建SSL加密層,並對傳輸數據進行加密,是HTTP協議的安全版。

2.自述概念:加密安全版的http協議

2.https加密技術

1.ssl對稱加密技術

SSL採用的加密技術叫作「共享密鑰加密」,也叫做「對稱密鑰加密」。

加密過程:

客戶端向服務器發送一條信息,首先客戶端會採用已知的算法對信息進行加密,好比MD5或者Base64加密,接收端對加密的信息進行解密的時候須要用到密鑰,中間會傳遞密鑰,(加密和解密的密鑰是同一個),密鑰在傳輸中間是被加密的。

缺點:

這種方式看起來安全,可是仍有潛在的危險,一旦被竊聽,或者信息被挾持,就有可能破解密鑰,而破解其中的信息。所以「共享密鑰加密」這種方式存在安全隱患

2.非對稱加密技術

加密過程:

「非對稱加密」使用的時候有兩把鎖,一把叫作「私有密鑰」,一把是「公開密鑰」,使用非對象加密的加密方式的時候,服務器首先告訴客戶端按照本身給定的公開密鑰進行加密處理,客戶端按照公開密鑰加密之後,服務器接受到信息再經過本身的私有密鑰進行解密,這樣作的好處就是解密的鑰匙根本就不會進行傳輸,所以也就避免了被挾持的風險。

就算公開密鑰被竊聽者拿到了,它也很難進行解密,由於解密過程是對離散對數求值,這可不是垂手可得就能作到的事。

缺點:

  • 如何保證接收端向發送端發出公開祕鑰的時候,發送端確保收到的是預先要發送的,而不會被挾持。只要是發送密鑰,就有可能有被挾持的風險。

  • 非對稱加密的方式效率比較低,它處理起來更爲複雜,通訊過程當中使用就有必定的效率問題而影響通訊速度

3.https證書機制

數字證書認證機構是客戶端與服務器均可信賴的第三方機構。

證書的具體傳播過程以下:

  • 服務器的開發者攜帶公開密鑰,向數字證書認證機構提出公開密鑰的申請,數字證書認證機構在認清申請者的身份,審覈經過之後,會對開發者申請的公開密鑰作數字簽名,而後分配這個已簽名的公開密鑰,並將密鑰放在證書裏面,綁定在一塊兒。

  • 服務器將這份數字證書發送給客戶端,由於客戶端也承認證書機構,客戶端能夠經過數字證書中的數字簽名來驗證公鑰的真僞,來確保服務器傳過來的公開密鑰是真實的。通常狀況下,證書的數字簽名是很難被僞造的,這取決於認證機構的公信力。

 

相關文章
相關標籤/搜索