1. 程式人生 > 其它 >爬蟲基礎原理

爬蟲基礎原理

爬蟲基礎概念

資料從何而來?

資料有以下的一些來源途徑:

  • 企業產生的使用者資料:百度指數、阿里指數、TBI騰訊瀏覽指數、新浪微博指數
  • 資料平臺購買資料:資料堂、國雲資料市場、貴陽大資料交易所
  • 政府/機構公開的資料:中華人民共和國國家統計局資料、世界銀行公開資料、聯合國資料、納斯達克。
  • 資料管理諮詢公司:麥肯錫、埃森哲、艾瑞諮詢
  • 爬取網路資料:如果需要的資料市場上沒有,或者不願意購買,那麼可以選擇招/做一名爬蟲工程師,自己動手豐衣足食。

而爬蟲,就是獲取資料的一種方式。

什麼是爬蟲?

爬蟲,就是抓取網頁資料的自動化程式。

爬蟲怎麼抓取網頁資料

網頁三大特徵:

  1. 每個網頁都有自己唯一的URL(統一資源定位符)進行定位;
  2. 網頁都使用HTML(超文字標記語言)來描述頁面資訊;
  3. 網頁都通過HTTP/HTTPS(超文字傳輸協議)來傳輸HTML資料。

根據網頁的特徵,我們得出了爬蟲的設計思路:

1. 獲取網頁

向伺服器傳送Request請求,得到Response之後解析Body部分,即網頁的原始碼。
Python庫:UrllibRequests

2. 提取資訊

分析網頁的原始碼,提取我們想要的資料。
提取方法

  • 通用方法:正則表示式(不過比較容易寫錯);
  • Python庫:BeautifulSoupPyQueryLXML等;

3.儲存資料

  • 儲存為文字:TXT、Json等;
  • 儲存到資料庫:MySQL、MongoDB等;
  • 儲存至遠端伺服器;

通用爬蟲和聚焦爬蟲

通用爬蟲

搜尋引擎用的爬蟲系統。

1.目標

儘可能地把網際網路的內容下載到本地伺服器形成備份,再對這些網頁做相關處理(提取關鍵字、去除廣告),最後形成一個使用者檢索的介面。

2.抓取流程

通用網路爬蟲的工作流程圖

  1. 首選選取一部分已有的URL,把這些URL放到待爬取佇列。
  2. 從佇列裡取出這些URL,然後解析DNS得到主機IP,然後去這個IP對應的伺服器裡下載HTML頁面,儲存到搜尋引擎的本地伺服器。之後把爬過的URL放入已爬取佇列。
  3. 分析這些網頁內容,找出網頁裡其他的URL連線,繼續執行第二步,直到爬取條件結束。

3.搜尋引擎如何獲取一個新網站的URL?

  1. 主動向搜尋引擎提交網址:http://zhanzhang.baidu.com/linksubmit/url
  2. 在其他網站裡設定網站的外鏈。
  3. 搜尋引擎會和DNS服務商進行合作,可以快速收錄新的網站。

DNS:就是一種把域名解析成IP的技術。一個域名一定對應一個IP,但IP可以沒有域名。

4.通用爬蟲並不是萬物皆可爬,它也需要遵守規則

Robots協議:協議會指明通用爬蟲可以爬取網頁的許可權。
Robots.txt 只是一個建議,並不是所有爬蟲都遵守,一般只有大型的搜尋引擎爬蟲才會遵守,咱們個人寫的爬蟲,就不管了。

5.通用爬蟲工作流程

爬取網頁 - 儲存資料 - 內容處理 - 提供檢索/排名服務

6.搜尋引擎排名

  1. PageRank值:根據網站的流量(點選量/瀏覽量/人氣)統計,流量越高,網站也越值錢,排名越靠前。
  2. 競價排名:誰給錢多,誰排名就高。

7.通用爬蟲的缺點

  1. 只能提供和文字相關的內容(HTML、Word、PDF)等等,但是不能提供多媒體檔案(音樂、圖片、視訊)和二進位制檔案(程式、指令碼)等等。
  2. 提供的結果千篇一律,不能針對不同背景領域的人提供不同的搜尋結果。
  3. 不能理解人類語義上的檢索。

為了解決以上問題,聚焦爬蟲出現了。

聚焦爬蟲

針對特定內容進行爬取,儘量爬取和主題相關的資訊。

HTTP和HTTPS

基礎概念:

  • HTTP協議(HyperText Transfer Protocol,超文字傳輸協議):是一種釋出和接收 HTML頁面的方法。
  • HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)簡單講是HTTP的安全版,在HTTP下加入SSL層。
  • SSL(Secure Sockets Layer 安全套接層)主要用於Web的安全傳輸協議,在傳輸層對網路連線進行加密,保障在Internet上資料傳輸的安全。

HTTP工作原理

網路爬蟲抓取過程可以理解為模擬瀏覽器操作的過程。
瀏覽器的主要功能是向伺服器發出請求,在瀏覽器視窗中展示您選擇的網路資源,HTTP是一套計算機通過網路進行通訊的規則。

HTTP的請求與響應

HTTP通訊由兩部分組成: 客戶端請求訊息 與 伺服器響應訊息

瀏覽器傳送HTTP請求的過程:

  1. 當用戶在瀏覽器的位址列中輸入一個URL並按回車鍵之後,瀏覽器會向HTTP伺服器傳送HTTP請求。HTTP請求主要為“Get”和“Post”兩種方法。
  2. 當我們在瀏覽器輸入URL http://www.baidu.com 的時候,瀏覽器傳送一個Request請求去獲取http://www.baidu.com 的html檔案,伺服器把Response檔案物件傳送回給瀏覽器。
  3. 瀏覽器分析Response中的 HTML,發現其中引用了很多其他檔案,比如Images檔案,CSS檔案,JS檔案。 瀏覽器會自動再次傳送Request去獲取圖片,CSS檔案,或者JS檔案。
  4. 當所有的檔案都下載成功後,網頁會根據HTML語法結構,完整的顯示出來了。

URL(Uniform / Universal Resource Locator):統一資源定位符,是用於完整地描述Internet上網頁和其他資源的地址的一種標識方法。

基本格式:

scheme://host[:port#]/path/…/[?query-string][#anchor]

說明:

  • scheme:協議(例如:http, https, ftp)
  • host:伺服器的IP地址或者域名
  • port#:伺服器的埠(如果是走協議預設埠,預設埠80)
  • path:訪問資源的路徑
  • query-string:引數,傳送給http伺服器的資料
  • anchor:錨(跳轉到網頁的指定錨點位置)

例如:http://item.jd.com/11936238.html#product-detail

客戶端HTTP請求

URL只是標識資源的位置,而HTTP是用來提交和獲取資源。客戶端傳送一個HTTP請求到伺服器的請求訊息,包括以下格式:

請求行、請求頭部、空行、請求資料

四個部分組成,下圖給出了請求報文的一般格式。

一個典型的HTTP請求示例:

GET https://www.baidu.com/ HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://www.baidu.com/
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: BAIDUID=04E4001F34EA74AD4601512DD3C41A7B:FG=1; BIDUPSID=04E4001F34EA74AD4601512DD3C41A7B; PSTM=1470329258; MCITY=-343%3A340%3A; BDUSS=nF0MVFiMTVLcUh-Q2MxQ0M3STZGQUZ4N2hBa1FFRkIzUDI3QlBCZjg5cFdOd1pZQVFBQUFBJCQAAAAAAAAAAAEAAADpLvgG0KGyvLrcyfrG-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFaq3ldWqt5XN; H_PS_PSSID=1447_18240_21105_21386_21454_21409_21554; BD_UPN=12314753; sug=3; sugstore=0; ORIGIN=0; bdime=0; H_PS_645EC=7e2ad3QHl181NSPbFbd7PRUCE1LlufzxrcFmwYin0E6b%2BW8bbTMKHZbDP0g; BDSVRTM=0