国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

網絡爬蟲技術的定義與反爬蟲技巧解讀

馬哥Linux運維 ? 2017-12-05 16:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Web是一個開放的平臺,這也奠定了Web從90年代初誕生直至今日將近30年來蓬勃的發展。然而,正所謂成也蕭何敗也蕭何,開放的特型、搜索引擎以及簡單易學的HTML、CSS技術使得Web成為了互聯網領域里最為流行和成熟的信息傳播媒介;但如今作為商業化軟件,Web這個平臺上的內容信息的版權卻毫無保證,因為相比軟件客戶端而言,你的網頁中的內容可以被很低成本、很低的技術門檻實現出的一些抓取程序獲取到,這也就是這一系列文章將要探討的話題——網絡爬蟲。

有很多人認為Web應當始終遵循開放的精神,呈現在頁面中的信息應當毫無保留地分享給整個互聯網。然而我認為,在IT行業發展至今天,Web已經不再是當年那個和PDF一爭高下的所謂“超文本”信息載體了,它已經是以一種輕量級客戶端軟件的意識形態的存在了。而商業軟件發展到今天,Web也不得不面對知識產權保護的問題,試想如果原創的高質量內容得不到保護,抄襲和盜版橫行網絡世界,這其實對Web生態的良性發展是不利的,也很難鼓勵更多的優質原創內容的生產。

未授權的爬蟲抓取程序是危害Web原創內容生態的一大元兇,因此要保護網站的內容,首先就要考慮如何反爬蟲。

從爬蟲的攻防角度來講

最簡單的爬蟲,是幾乎所有服務端、客戶端編程語言都支持的http請求,只要向目標頁面的url發起一個http get請求,即可獲得到瀏覽器加載這個頁面時的完整html文檔,這被我們稱之為“同步頁”。

作為防守的一方,服務端可以根據http請求頭中的User-Agent來檢查客戶端是否是一個合法的瀏覽器程序,亦或是一個腳本編寫的抓取程序,從而決定是否將真實的頁面信息內容下發給你。

這當然是最小兒科的防御手段,爬蟲作為進攻的一方,完全可以偽造User-Agent字段,甚至,只要你愿意,http的get方法里, request header的 Referrer 、 Cookie 等等所有字段爬蟲都可以輕而易舉的偽造。

此時服務端可以利用瀏覽器http頭指紋,根據你聲明的自己的瀏覽器廠商和版本(來自 User-Agent ),來鑒別你的http header中的各個字段是否符合該瀏覽器的特征,如不符合則作為爬蟲程序對待。這個技術有一個典型的應用,就是PhantomJS1.x版本中,由于其底層調用了Qt框架的網絡庫,因此http頭里有明顯的Qt框架網絡請求的特征,可以被服務端直接識別并攔截。

除此之外,還有一種更加變態的服務端爬蟲檢測機制,就是對所有訪問頁面的http請求,在 http response 中種下一個 cookie token ,然后在這個頁面內異步執行的一些ajax接口里去校驗來訪請求是否含有cookie token,將token回傳回來則表明這是一個合法的瀏覽器來訪,否則說明剛剛被下發了那個token的用戶訪問了頁面html卻沒有訪問html內執行js后調用的ajax請求,很有可能是一個爬蟲程序。

如果你不攜帶token直接訪問一個接口,這也就意味著你沒請求過html頁面直接向本應由頁面內ajax訪問的接口發起了網絡請求,這也顯然證明了你是一個可疑的爬蟲。知名電商網站amazon就是采用的這種防御策略。

以上則是基于服務端校驗爬蟲程序,可以玩出的一些套路手段。

基于客戶端js運行時的檢測

現代瀏覽器賦予了JavaScript強大的能力,因此我們可以把頁面的所有核心內容都做成js異步請求 ajax 獲取數據后渲染在頁面中的,這顯然提高了爬蟲抓取內容的門檻。依靠這種方式,我們把對抓取與反抓取的對抗戰場從服務端轉移到了客戶端瀏覽器中的js運行時,接下來說一說結合客戶端js運行時的爬蟲抓取技術。

剛剛談到的各種服務端校驗,對于普通的python、java語言編寫的http抓取程序而言,具有一定的技術門檻,畢竟一個web應用對于未授權抓取者而言是黑盒的,很多東西需要一點一點去嘗試,而花費大量人力物力開發好的一套抓取程序,web站作為防守一方只要輕易調整一些策略,攻擊者就需要再次花費同等的時間去修改爬蟲抓取邏輯。

此時就需要使用headless browser了,這是什么技術呢?其實說白了就是,讓程序可以操作瀏覽器去訪問網頁,這樣編寫爬蟲的人可以通過調用瀏覽器暴露出來給程序調用的api去實現復雜的抓取業務邏輯。

其實近年來這已經不算是什么新鮮的技術了,從前有基于webkit內核的PhantomJS,基于Firefox瀏覽器內核的SlimerJS,甚至基于IE內核的trifleJS,有興趣可以看看這里和這里 是兩個headless browser的收集列表。

這些headless browser程序實現的原理其實是把開源的一些瀏覽器內核C++代碼加以改造和封裝,實現一個簡易的無GUI界面渲染的browser程序。但這些項目普遍存在的問題是,由于他們的代碼基于fork官方webkit等內核的某一個版本的主干代碼,因此無法跟進一些最新的css屬性和js語法,并且存在一些兼容性的問題,不如真正的release版GUI瀏覽器。

這其中最為成熟、使用率最高的應該當屬PhantonJS了,對這種爬蟲的識別我之前曾寫過一篇博客,這里不再贅述。PhantomJS存在諸多問題,因為是單進程模型,沒有必要的沙箱保護,瀏覽器內核的安全性較差。

如今Google Chrome團隊在chrome 59 release版本中開放了headless mode api,并開源了一個基于Node.js調用的headless chromium dirver庫,我也為這個庫貢獻了一個centos環境的部署依賴安裝列表。

headless chrome可謂是headless browser中獨樹一幟的大殺器,由于其自身就是一個chrome瀏覽器,因此支持各種新的css渲染特性和js運行時語法。

基于這樣的手段,爬蟲作為進攻的一方可以繞過幾乎所有服務端校驗邏輯,但是這些爬蟲在客戶端的js運行時中依然存在著一些破綻,諸如:

基于plugin對象的檢查

基于language的檢查

基于webgl的檢查

基于瀏覽器hairline特性的檢查

基于錯誤img src屬性生成的img對象的檢查

基于以上的一些瀏覽器特性的判斷,基本可以通殺市面上大多數headless browser程序。在這一點上,實際上是將網頁抓取的門檻提高,要求編寫爬蟲程序的開發者不得不修改瀏覽器內核的C++代碼,重新編譯一個瀏覽器,并且,以上幾點特征是對瀏覽器內核的改動其實并不小。

更進一步,我們還可以基于瀏覽器的UserAgent字段描述的瀏覽器品牌、版本型號信息,對js運行時、DOM和BOM的各個原生對象的屬性及方法進行檢驗,觀察其特征是否符合該版本的瀏覽器所應具備的特征。

這種方式被稱為瀏覽器指紋檢查技術,依托于大型web站對各型號瀏覽器api信息的收集。而作為編寫爬蟲程序的進攻一方,則可以在headless browser運行時里預注入一些js邏輯,偽造瀏覽器的特征。

另外,在研究瀏覽器端利用js api進行robots browser detect時,我們發現了一個有趣的小技巧,你可以把一個預注入的js函數,偽裝成一個native function,來看看下面代碼:

爬蟲進攻方可能會預注入一些js方法,把原生的一些api外面包裝一層proxy function作為hook,然后再用這個假的js api去覆蓋原生api。如果防御者在對此做檢查判斷時是基于把函數toString之后對[native code]的檢查,那么就會被繞過。所以需要更嚴格的檢查,因為bind(null)偽造的方法,在toString之后是不帶函數名的。

反爬蟲的銀彈

目前的反抓取、機器人檢查手段,最可靠的還是驗證碼技術。但驗證碼并不意味著一定要強迫用戶輸入一連串字母數字,也有很多基于用戶鼠標、觸屏(移動端)等行為的行為驗證技術,這其中最為成熟的當屬Google reCAPTCHA。

基于以上諸多對用戶與爬蟲的識別區分技術,網站的防御方最終要做的是封禁ip地址或是對這個ip的來訪用戶施以高強度的驗證碼策略。這樣一來,進攻方不得不購買ip代理池來抓取網站信息內容,否則單個ip地址很容易被封導致無法抓取。抓取與反抓取的門檻被提高到了ip代理池經濟費用的層面。

機器人協議

除此之外,在爬蟲抓取技術領域還有一個“白道”的手段,叫做robots協議。你可以在一個網站的根目錄下訪問/robots.txt,比如讓我們一起來看看github的機器人協議,Allow和Disallow聲明了對各個UA爬蟲的抓取授權。

不過,這只是一個君子協議,雖具有法律效益,但只能夠限制那些商業搜索引擎的蜘蛛程序,你無法對那些“野爬愛好者”加以限制。

寫在最后

對網頁內容的抓取與反制,注定是一個魔高一尺道高一丈的貓鼠游戲,你永遠不可能以某一種技術徹底封死爬蟲程序的路,你能做的只是提高攻擊者的抓取成本,并對于未授權的抓取行為做到較為精確的獲悉。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • CSS
    CSS
    +關注

    關注

    0

    文章

    110

    瀏覽量

    15497
  • 網絡爬蟲
    +關注

    關注

    1

    文章

    52

    瀏覽量

    9155

原文標題:爬蟲技術的門道,這篇文章總結的最全

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    識別網絡爬蟲的策略分析

    爬蟲(crawler)也可以被稱為spider和robot,通常是指對目標網站進行自動化瀏覽的腳本或者程序,包括使用requests庫編寫腳本等。隨著互聯網的不斷發展,網絡爬蟲愈發常見,并占用了大量
    的頭像 發表于 09-14 09:08 ?2136次閱讀
    識別<b class='flag-5'>網絡</b><b class='flag-5'>爬蟲</b>的策略分析

    Python數據爬蟲學習內容

    。3.掌握一些常用的爬蟲技巧。使用代理IP池、抓包、驗證碼的OCR處理等處理方式即可以解決大部分網站的爬蟲策略。4.了解分布式存儲分布式這個東西,聽起來很恐怖,但其實就是利用多線程
    發表于 05-09 17:25

    patyon爬蟲技術PDF課件分享

    patyon爬蟲技術PDF課件分享
    發表于 02-14 16:33

    爬蟲瀏覽器全解

    Python_爬蟲解決辦法
    發表于 07-29 16:00

    應對爬蟲的策略

    被機器人肆意地濫用,網站的安全和流量費用就會面臨嚴重威脅,因此很多網站都會想辦法防止爬蟲程序接入。為了能夠更好的爬蟲,我們需要使用可變的ip地址,建立網絡爬蟲的第一原則是:所有信息都可
    發表于 12-12 17:39

    網絡爬蟲之關于爬蟲http代理的常見使用方式

    在做爬蟲的過程中,如果你爬取的頻率過快,不符合人的操作模式。有些網站的爬蟲機制通過監測到你的IP異常,訪問頻率過高。就會對你進行封IP處理。目前已有比較多的第三方平臺專門進行代理IP的服務,那
    發表于 04-26 17:43

    網絡爬蟲nodejs爬蟲代理配置

    隨著互聯網的發展進步,現在互聯網上也有許多網絡爬蟲。網絡爬蟲通過自己爬蟲程序向目標網站采集相關數據信息。當然互聯網的網站會有
    發表于 09-01 17:23

    python網絡爬蟲概述

    網絡爬蟲(Web Spider)又稱網絡蜘蛛、網絡機器人,是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。網絡
    發表于 03-21 16:51

    一種新型網絡爬蟲的設計與實現

    網絡爬蟲是當今網絡實時更新和搜索引擎技術的共同產物。文中深入探討了如何應用網絡爬蟲
    發表于 02-26 14:23 ?9次下載

    爬蟲是如何實現數據的獲取爬蟲程序如何實現

    進入大數據時代,爬蟲技術越來越重要,因為它是獲取數據的一個重要手段,是大數據和云計算的基礎。那么,爬蟲到底是如何實現數據的獲取的呢?今天和大家分享的就是一個系統學習爬蟲
    發表于 01-02 16:30 ?10次下載
    <b class='flag-5'>爬蟲</b>是如何實現數據的獲取<b class='flag-5'>爬蟲</b>程序如何實現

    網絡爬蟲是否合法

    網絡爬蟲在大多數情況中都不違法,其實我們生活中幾乎每天都在爬蟲應用,如百度,你在百度中搜索到的內容幾乎都是爬蟲采集下來的(百度自營的產品除外,如百度知道、百科等),所以
    的頭像 發表于 03-21 17:20 ?1.3w次閱讀

    常用的網絡爬蟲軟件

    本視頻主要詳細介紹了常用的網絡爬蟲軟件,分別是神箭手云爬蟲、火車頭采集器、八爪魚采集器、后羿采集器。
    的頭像 發表于 03-21 17:25 ?3.1w次閱讀

    爬蟲技術為什么變成了害蟲?爬蟲技術到底犯了什么錯?

     近日,多家通過爬蟲技術開展大數據信貸風控的公司被查。短短幾天時間,“爬蟲技術被推上了風口浪尖,大數據風控行業也迎來了前所未有的“震蕩”。業內人士透露,這些被調查的大數據公司基本都是
    的頭像 發表于 09-21 11:16 ?4774次閱讀

    爬蟲技術涉案大數據分析及法律解讀

    ? 爬蟲技術涉案大數據分析及法律解讀 爬蟲技術作為一種前端獲取網站信息數據的技術,在目前大數據應
    的頭像 發表于 01-12 16:39 ?4951次閱讀

    python網絡爬蟲概述

    網絡爬蟲(Web Spider)又稱網絡蜘蛛、網絡機器人,是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。 網絡
    的頭像 發表于 03-21 16:50 ?2600次閱讀