爬蟲基礎原理
爬蟲基礎概念
資料從何而來?
資料有以下的一些來源途徑:
- 企業產生的使用者資料:百度指數、阿里指數、TBI騰訊瀏覽指數、新浪微博指數
- 資料平臺購買資料:資料堂、國雲資料市場、貴陽大資料交易所
- 政府/機構公開的資料:中華人民共和國國家統計局資料、世界銀行公開資料、聯合國資料、納斯達克。
- 資料管理諮詢公司:麥肯錫、埃森哲、艾瑞諮詢
- 爬取網路資料:如果需要的資料市場上沒有,或者不願意購買,那麼可以選擇招/做一名爬蟲工程師,自己動手豐衣足食。
而爬蟲,就是獲取資料的一種方式。
什麼是爬蟲?
爬蟲,就是抓取網頁資料的自動化程式。
爬蟲怎麼抓取網頁資料
網頁三大特徵:
- 每個網頁都有自己唯一的URL(統一資源定位符)進行定位;
- 網頁都使用HTML(超文字標記語言)來描述頁面資訊;
- 網頁都通過HTTP/HTTPS(超文字傳輸協議)來傳輸HTML資料。
根據網頁的特徵,我們得出了爬蟲的設計思路:
1. 獲取網頁
向伺服器傳送Request請求,得到Response之後解析Body部分,即網頁的原始碼。
Python庫:Urllib
、Requests
等
2. 提取資訊
分析網頁的原始碼,提取我們想要的資料。
提取方法
- 通用方法:正則表示式(不過比較容易寫錯);
- Python庫:
BeautifulSoup
、PyQuery
、LXML
等;
3.儲存資料
- 儲存為文字:TXT、Json等;
- 儲存到資料庫:MySQL、MongoDB等;
- 儲存至遠端伺服器;
通用爬蟲和聚焦爬蟲
通用爬蟲
搜尋引擎用的爬蟲系統。
1.目標
儘可能地把網際網路的內容下載到本地伺服器形成備份,再對這些網頁做相關處理(提取關鍵字、去除廣告),最後形成一個使用者檢索的介面。
2.抓取流程
通用網路爬蟲的工作流程圖
- 首選選取一部分已有的URL,把這些URL放到待爬取佇列。
- 從佇列裡取出這些URL,然後解析DNS得到主機IP,然後去這個IP對應的伺服器裡下載HTML頁面,儲存到搜尋引擎的本地伺服器。之後把爬過的URL放入已爬取佇列。
- 分析這些網頁內容,找出網頁裡其他的URL連線,繼續執行第二步,直到爬取條件結束。
3.搜尋引擎如何獲取一個新網站的URL?
- 主動向搜尋引擎提交網址:http://zhanzhang.baidu.com/linksubmit/url
- 在其他網站裡設定網站的外鏈。
- 搜尋引擎會和DNS服務商進行合作,可以快速收錄新的網站。
DNS:就是一種把域名解析成IP的技術。一個域名一定對應一個IP,但IP可以沒有域名。
4.通用爬蟲並不是萬物皆可爬,它也需要遵守規則
Robots協議:協議會指明通用爬蟲可以爬取網頁的許可權。
Robots.txt 只是一個建議,並不是所有爬蟲都遵守,一般只有大型的搜尋引擎爬蟲才會遵守,咱們個人寫的爬蟲,就不管了。
5.通用爬蟲工作流程
爬取網頁 - 儲存資料 - 內容處理 - 提供檢索/排名服務
6.搜尋引擎排名
- PageRank值:根據網站的流量(點選量/瀏覽量/人氣)統計,流量越高,網站也越值錢,排名越靠前。
- 競價排名:誰給錢多,誰排名就高。
7.通用爬蟲的缺點
- 只能提供和文字相關的內容(HTML、Word、PDF)等等,但是不能提供多媒體檔案(音樂、圖片、視訊)和二進位制檔案(程式、指令碼)等等。
- 提供的結果千篇一律,不能針對不同背景領域的人提供不同的搜尋結果。
- 不能理解人類語義上的檢索。
為了解決以上問題,聚焦爬蟲出現了。
聚焦爬蟲
針對特定內容進行爬取,儘量爬取和主題相關的資訊。
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請求的過程:
- 當用戶在瀏覽器的位址列中輸入一個URL並按回車鍵之後,瀏覽器會向HTTP伺服器傳送HTTP請求。HTTP請求主要為“Get”和“Post”兩種方法。
- 當我們在瀏覽器輸入URL http://www.baidu.com 的時候,瀏覽器傳送一個Request請求去獲取http://www.baidu.com 的html檔案,伺服器把Response檔案物件傳送回給瀏覽器。
- 瀏覽器分析Response中的 HTML,發現其中引用了很多其他檔案,比如Images檔案,CSS檔案,JS檔案。 瀏覽器會自動再次傳送Request去獲取圖片,CSS檔案,或者JS檔案。
- 當所有的檔案都下載成功後,網頁會根據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