爬蟲基本原理

爬蟲是什麼

 

'''
    近年來,隨着網絡應用的逐漸擴展和深刻,如何高效的獲取網上數據成爲了無數公司和我的的追求,在大數據時代,誰掌握了更多的數據,誰就能夠得到更高的利益,而網絡爬蟲是其中最爲經常使用的一種從網上爬取數據的手段。
    網絡爬蟲,即Web Spider,是一個很形象的名字。若是把互聯網比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛。網絡蜘蛛是經過網頁的連接地址來尋找網頁的。網站某一個頁面(一般是首頁)開始,讀取網頁的內容,找到在網頁中的其它連接地址,而後經過這些連接地址尋找下一個網頁,這樣一直循環下去,直到把這個網站全部的網頁都抓取完爲止。若是把整個互聯網當成一個網站,那麼網絡蜘蛛就能夠用這個原理把互聯網上全部的網頁都抓取下來。
'''
爬蟲的比喻:
      若是咱們把互聯網比做一張大的蜘蛛網,那一臺計算機上的數據即是蜘蛛網上的一個獵物,而爬蟲程序就是一隻小蜘蛛,沿着蜘蛛網抓取本身想要的獵物/數據

爬蟲的定義:
      向網站發起請求,獲取資源後分析並提取有用數據的程序 

爬蟲的價值:
      互聯網中最有價值的即是數據,好比天貓商城的商品信息,鏈家網的租房信息,雪球網的證券投資信息等等,這些數據都表明了各個行業的真金白銀,能夠說,誰
掌握了行業內的第一手數據,誰就成了整個行業的主宰,若是把整個互聯網的數據比喻爲一座寶藏,那咱們的爬蟲課程就是來教你們如何來高效地挖掘這些寶藏,掌握了爬
蟲技能,你就成了全部互聯網信息公司幕後的老闆,換言之,它們都在免費爲你提供有價值的數據。


請求庫封裝了TCP 套接字(傳輸層),因此只要關注http協議(應用層)
http協議 +ip&端口(域名經過dns解析) +路由(這個html存放的位置)
http比做高速公路,他有規則

 



哪些語言能夠實現爬蟲

複製代碼
# 1.php:
    能夠實現爬蟲。php被號稱是全世界最優美的語言(固然是其本身號稱的,就是王婆賣瓜的意思),可是php在實現爬蟲中支持多線程和多進程方面作的很差。

# 2.java:
    能夠實現爬蟲。java能夠很是好的處理和實現爬蟲,是惟一能夠與python並駕齊驅且是python的頭號勁敵。可是java實現爬蟲代碼較爲臃腫,重構成本較大。

# 3.c、c++:
    能夠實現爬蟲。可是使用這種方式實現爬蟲純粹是是某些人(大佬們)能力的體現,卻不是明智和合理的選擇。

# 4.python:
    能夠實現爬蟲。python實現和處理爬蟲語法簡單,代碼優美,支持的模塊繁多,學習成本低,具備很是強大的框架(scrapy等)且一句難以言表的好!沒有可是!
複製代碼

 爬蟲的應用

複製代碼
# 1.通用爬蟲:通用爬蟲是搜索引擎(Baidu、Google、Yahoo等)「抓取系統」的重要組成部分。主要目的是將互聯網上的網頁下載到本地,造成一個互聯網內容的鏡像備份。
  1)搜索引擎如何抓取互聯網上的網站數據?
     a)門戶網站主動向搜索引擎公司提供其網站的url
     b)搜索引擎公司與DNS服務商合做,獲取網站的url
     c)門戶網站主動掛靠在一些知名網站的友情連接中

# 2.聚焦爬蟲:聚焦爬蟲是根據指定的需求抓取網絡上指定的數據。
  例如:
     獲取豆瓣上電影的名稱和影評,而不是獲取整張頁面中全部的數據值。
複製代碼

 爬蟲的基本流程

複製代碼
 
 tip1: 發送請求的就是模擬瀏覽器發送請求,闡述底層如何走的。請求須要使用請求庫,請求庫幫咱們實現了什麼功能。
 
# 一、發起請求: 
  使用http庫向目標站點發起請求,即發送一個Request
  Request包含:請求頭、請求體等

# 二、獲取響應內容
  若是服務器能正常響應,則會獲得一個Response
  Response包含:html,json,圖片,視頻等

# 三、解析內容
  解析html數據:正則表達式,第三方解析庫如Beautifulsoup,pyquery等
  解析json數據:json模塊
  解析二進制數據:以b的方式寫入文件

# 四、保存數據
  數據庫
  文件
複製代碼

請求與響應

 

# URL的格式由三部分組成:
    ①第一部分是協議(或稱爲服務方式)。
    ②第二部分是存有該資源的主機IP地址(有時也包括端口號)。
    ③第三部分是主機資源的具體地址,如目錄和文件名等

# http協議:
    https://www.cnblogs.com/kermitjam/p/10432198.html

# robots協議: 
    https://www.cnblogs.com/kermitjam/articles/9692568.html

# Request:
  用戶將本身的信息經過瀏覽器(socket client)發送給服務器(socket server)

# Response:
  服務器接收請求,分析用戶發來的請求信息,而後返回數據(返回的數據中可能包含其餘連接,如:圖片,js,css等)

# ps:
  瀏覽器在接收Response後,會解析其內容來顯示給用戶,而爬蟲程序在模擬瀏覽器發送請求而後接收Response後,是要提取其中的有用數據。

Request

複製代碼
 
#一、請求方式:
    經常使用的請求方式:
    GET,POST
其餘請求方式:
    HEAD,PUT,DELETE,OPTHONS ps:用瀏覽器演示get與post的區別,(用登陸演示post) post與get請求最終都會拼接成這種形式:
    k1=xxx&k2=yyy&k3=zzz
post請求的參數放在請求體內: 可用瀏覽器查看,存放於form data內
    get請求的參數直接放在url後 #二、請求url url全稱統一資源定位符,如一個網頁文檔,一張圖片 一個視頻等均可以用url惟一來肯定 url編碼:   https://www.baidu.com/s?wd=圖片   圖片會被編碼(看示例代碼) 網頁的加載過程是:   加載一個網頁,一般都是先加載document文檔,在解析document文檔的時候,遇到連接,則針對超連接發起下載圖片的請求。 #三、請求頭 User-agent:
    請求頭中若是沒有user-agent客戶端配置,服務端可能將你當作一個非法用戶。
     Cookies:
    cookie用來保存登陸信息。
   Referer:
    
瀏覽器上次訪問的網頁url
   通常作爬蟲都會加上請求頭
#四、請求體
    若是是get方式,請求體沒有內容
    若是是post方式,請求體是format data

  ps:
    一、登陸窗口,文件上傳等,信息都會被附加到請求體內
    二、登陸,輸入錯誤的用戶名密碼,而後提交,就能夠看到post,正確登陸後頁面一般會跳轉,沒法捕捉到post 
 
複製代碼
  View Code
  請求參數詳解
  User-Agent大全

 Response

複製代碼
 
# 一、響應狀態: 
    200:表明成功
    301:表明跳轉
    404:文件不存在
    403:權限
    502:服務器錯誤

# 二、響應頭: Respone header
    set-cookie:可能有多個,是來告訴瀏覽器,把cookie保存下來。
    
# 三、網頁源代碼: preview
    最主要的部分,包含了請求資源的內容,如網頁html、圖片和二進制數據等。
 
複製代碼

 

 

總結

複製代碼
 
# 一、總結爬蟲流程:
    爬取--->解析--->存儲

# 二、爬蟲所需工具:
    請求庫:requests,selenium
    解析庫:正則,beautifulsoup,pyquery
    存儲庫:文件,MySQL,Mongodb,Redis

# 三、爬蟲經常使用框架:
    scrapy
 
複製代碼
相關文章
相關標籤/搜索