爬蟲、反爬蟲、反反爬蟲

最近爬取了百萬數據,如下是學習爬蟲時彙總的相關知識點php

什麼是爬蟲和反爬蟲

  • 爬蟲 —— 使用任何技術手段批量獲取網站信息的一種方式,關鍵在批量。
  • 反爬蟲 —— 使用任何技術手段,阻止別人批量獲取本身網站信息的一種方式。關鍵也在於批量。
  • 誤傷 —— 在反爬蟲的過程當中,錯誤的將普通用戶識別爲爬蟲。誤傷率高的反爬蟲策略,效果再好也不能用。
  • 攔截 —— 成功地阻止爬蟲訪問。一般來講,攔截率越高的策略,誤傷率就越高,所以要作權衡。
  • 資源 —— 機器成本與人力成本的總和。

反什麼樣的爬蟲

  • 應屆畢業生(三月份爬蟲)
    三月份爬蟲一般和畢業生(本科生、碩士、博士等)有關,他們的爬蟲簡單粗暴,爲了讓論文有數據支撐,根本無論服務器壓力,加上人數不可預測,很容易弄掛站點。html

  • 創業小公司
    每一年新增的創業公司不少,程序開發完後,缺乏數據支撐,出於公司生死存亡的考慮,不斷爬取數據。前端

  • 不當心寫錯了沒人去中止的失控小爬蟲
    像知乎,攜程,財經等網站,可能高達60%的訪問量是爬蟲。你就算直接封殺,也無濟於事。他們可能根本爬不到任何數據了,除了http code是200之外,一切都是不對的,但因爲託管後無人認領,仍然會依然孜孜不倦地爬取。java

  • 成型的商業對手
    這是最大的對手,有技術,有錢,要什麼有什麼,若是和你死磕,你就只能硬着頭皮和他死磕。python

  • 抽風的搜索引擎
    搜索引擎也有抽風的時候,並且一抽風就會致使服務器性能降低,請求量跟網絡攻擊沒有區別。git


常見的爬蟲、反爬蟲手段


[1] 爬取的前提是知道網站/APP的存在,若是系統不對外開放,你可能連它的存在都不知道。程序員

[2] APP的請求能夠用Fiddler抓取,具體操做見文尾的相關連接。一些APP的爬取相對Web難度較高,文本可能進行了壓縮和加密,甚至爲了節省用戶流量,部分請求不走後端,Fiddler天然抓取不到。github

[3] 攔截率越高的策略,誤傷率就越高,甚至影響搜索引擎的收錄。若是網站包含不但願被搜索引擎收錄的內容,能夠在站點部署 robots 文件。web

[4] 知乎就不太可能爲了反扒強制要求輸入驗證碼,而CSDN的文件一旦下載次數過多,就會強制輸入驗證碼。segmentfault

[5] 關於驗證碼的識別與反識別也是一部恢弘壯麗的鬥爭史,目前的人機識別驗證就是比較有效的反爬手段。數字驗證碼識別詳見: 爬蟲的坎坷之路-數字驗證碼識別

[6] 關於人類訪問特徵的介紹,詳見: 當爬蟲不遵照 robots 協議時,有沒有防止抓取的可能?

[7] 反爬蟲的關鍵在於阻止被批量爬取,重點在批量。反爬蟲技術的核心在於不斷變動規則,好比不斷變動驗證碼。
咱們在內容上能夠作以下文章:

  • 網站不一樣地方的文本內容添加不一樣的自帶標籤,增長對方數據清理難度。
  • 關鍵數據由文本轉圖片,甚至添加水印等。目前市場上圖片ocr識別沒法有效轉文字,讓對方即便獲取了圖片也沒法有效使用。
  • 網站相關頁面的列表查詢,限制總頁數的展現。好比數據一共1K頁,相關接口卻只對外展現前十頁。對方找不到入口最多爬取10頁數據。
  • 間接關閉網站核心數據查看入口,好比內容的查看像百度文庫同樣改成word、pdf或者ppt下載模式,高頻下載須要驗證碼或者帳號積分。
  • 網站不提供註冊入口,或者註冊須要內部推薦或者評審,加大爬蟲方獲取帳號的難度。
  • 網站的請求url複雜化,好比弄的像淘寶同樣沒有規律,id改成UUID等。
  • 前端頁面儘量不暴露數據的惟一鍵,對惟一鍵如主鍵id等進行假裝,能夠增長對方爬取後的去重成本。由於對方爬數據多是在你的多個模塊頁面進行多維度爬取,會有大量的重複數據。
  • 前端html頁面別一次性加載列表,根據用戶點擊js動態加載。即查詢頁面源碼時,只能看到列表的第一條數據。
  • 當肯定訪問異常時,大量返回虛假數據。爬蟲幾乎沒有判斷數據真假的能力,只有人才有。對方發現的越晚,咱們的處理應對時間就越充裕。
  • 核心數據提升安全等級,單獨加密等。
    ....

疑問相關

一、爬蟲是否涉嫌違法? 若是是的話,怎麼要求賠償?
爬取的內容商業使用目前更傾向屬於違法行爲,可是在國內仍是個擦邊球,難以起訴成功。若是不想被批量爬取,技術纔是最後保障。

二、在爬蟲與反爬蟲的對弈中,誰會勝利?
爬蟲與反爬蟲的重點都在於批量,沒有絕對的勝利方。可是能夠肯定的是,只要人類可以正常訪問的網頁,爬蟲在具有同等資源的狀況下必定是能夠抓取到,只是可否短期內大批量爬取的問題。

三、怎麼快速爬取數據?
首先考慮的是用網上各類破解版爬蟲軟件爬取數據,好比火車頭採集器。即能用軟件解決的爬取步驟,就不必寫代碼實現,由於程序員比軟件和服務器等資源金貴。其次考慮的才應該是如何用代碼解決軟件實現不了的步驟。

四、爲何須要反爬蟲?

  • 公司的重要資源被批量爬取,喪失競爭力。
  • 爬蟲佔總PV比例過高,由於高訪問量浪費了太多錢。
  • 爬蟲拖垮了站點,嚴重影響了用戶體驗。
  • 資源被爬取難以起訴成功,對方能夠肆意爬取。

連接相關

相關文章
相關標籤/搜索