国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

開發
如今作為商業化軟件,Web這個平臺上的內容信息的版權卻毫無保證,因為相比軟件客戶端而言,你的網頁中的內容可以被很低成本、很低的技術門檻實現出的一些抓取程序獲取到,這也就是這一系列文章將要探討的話題—— 網絡爬蟲 。

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

[[212148]]

有很多人認為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中的各個字段是否符合該瀏覽器的特征,如不符合則作為爬蟲程序對待。這個技術有一個典型的應用,就是 PhantomJS 1.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爬蟲的抓取授權。

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

寫在最后

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

這篇文章中提到的對于驗證碼的攻防其實也是一個較為復雜的技術難點,在此留一個懸念,感興趣可以加關注期待后續文章進行詳細闡述。

 

另外,歡迎對抓取方面感興趣的朋友關注我的一個開源項目webster, 項目以Node.js 結合Chrome headless模式實現了一個高可用性網絡爬蟲抓取框架,借以chrome對頁面的渲染能力, 可以抓取一個頁面中 所有的js及ajax渲染的異步內容;并結合redis實現了一個任務隊列,使得爬蟲程序可以方便的進行橫向、縱向的分布式擴展。 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2019-06-18 10:49:41

Python技術web

2019-08-01 11:04:10

Linux磁盤I

2022-04-14 10:10:59

Nginx開源Linux

2019-10-31 09:48:53

MySQL數據庫事務

2017-03-30 22:41:55

虛擬化操作系統軟件

2019-09-25 09:17:43

物聯網技術信息安全

2021-09-30 09:59:23

OSPF網絡協議網絡技術

2017-03-16 15:05:45

人工智能機器學習智能手機

2018-10-31 17:22:25

AI人工智能芯片

2018-04-13 16:24:59

區塊鏈數據庫去中心化

2017-03-07 15:35:26

Android適配 界面

2021-11-10 07:47:48

Traefik邊緣網關

2021-02-24 07:38:50

Redis

2017-12-12 12:53:09

2021-07-13 12:21:34

PythonRPC通信

2017-03-10 21:04:04

Android適配

2017-11-27 10:52:42

存儲性能模型

2018-08-17 09:14:43

餓了么容器演進

2016-12-19 15:30:16

安全框架信息安全

2019-10-16 08:25:33

JavaScriptwebprototype
點贊
收藏

51CTO技術棧公眾號

欧美一区二区不卡视频| 亚洲图片小说在线| 中文字幕av网| а天堂中文最新一区二区三区| 亚洲天堂免费电影| 国产电影一区| 久久久久国内| 欧美激情aaaa| 国内福利写真片视频在线| 国产欧美日韩免费| 精品国产三区在线| 国产午夜精品一区二区三区| 成人短视频在线| 91国产免费看| 一级视频在线观看| 欧美日韩免费在线| 在线小视频网址| 亚洲18色成人| 天堂影视av| 图片区小说区国产精品视频| 李宗瑞系列合集久久| 亚洲综合免费观看高清在线观看| 国精产品999国精产品官网| 日韩一区欧美一区| 在线黄色国产电影| 色系网站成人免费| 亚洲欧美成人影院| 亚洲人成自拍网站| 麻豆一区在线| 国产成人精品综合久久久| 欧美成人精品一区二区三区在线看| 国产精品自拍小视频| 欧美涩涩网站| 视频一区视频二区视频三区视频四区国产 | 久热国产在线| 销魂美女一区二区三区视频在线| 国产精品免费网站| 国产激情视频网址| 欧美美女在线直播| 久久久精品tv| 国内精品久久久久久久| 中文字幕の友人北条麻妃| 无遮挡动作视频在线观看免费入口| 天堂一区二区在线| 亚洲福利影片在线| 免费人成在线观看网站| 亚洲色图20p| 国语对白做受xxxxx在线中国| 亚洲精品免费在线观看| 亚洲qvod图片区电影| 欧美黄页免费| 97免费视频在线| 91成人影院| 涩涩涩999| 成人国产精品免费网站| 国产精品区在线| 欧美日韩亚洲视频| 欧美另类tv| 久久久久国产精品免费网站| 欧美在线观看天堂一区二区三区| 日韩女优中文字幕| 国产精品久久久久久久裸模| www.亚洲视频| 久久视频在线看| 欧美一区成人| 可以在线看的av网站| 日本大香伊一区二区三区| 日韩成人亚洲| 成人黄色片在线| 国产精品99久久久久久久vr| 中文字幕一区免费| 亚洲片在线资源| 色欧美自拍视频| av在线免费观看国产| 午夜不卡在线视频| 老司机精品视频网| 粉嫩av四季av绯色av第一区| 91在线视频在线| 99中文字幕一区| 欧美国产亚洲精品久久久8v| aa级大片欧美三级| 婷婷亚洲天堂| 亚洲成人精品在线| 亚洲不卡av不卡一区二区| 国产精品免费观看久久| 91精选在线观看| 精品视频99| 黄色一级一级片| 欧美精品一区二区三区一线天视频| 亚洲欧美日本伦理| 欧美成人二区| 精品国产美女在线| 黄色成人影院| 国产美女高潮久久白浆| 免费国产在线视频| 亚洲国产清纯| 少妇高潮喷水久久久久久久久久| 欧美性高跟鞋xxxxhd| 亚洲日本va午夜在线电影| 欧美理论一区二区| 五月综合激情网| 成人在线视频www| 国产精品自拍毛片| 国产精品探花在线| 日韩一区二区久久久| 国产mv日韩mv欧美| 少妇视频在线观看| caopeng在线| 久久久久久中文| 激情欧美一区二区三区在线观看| 最新中文字幕在线| 97免费在线视频| 91蜜桃网址入口| 久久青青视频| 欧洲视频一区二区三区| 色婷婷国产精品| 亚洲理论电影片| 黄色片视频在线播放| 亚洲区在线播放| 免费成人在线影院| 污视频在线看网站| 免费日韩av电影| 欧美亚洲日本国产| 亚洲成人日韩| 亚洲pron| 91精品综合视频| 疯狂蹂躏欧美一区二区精品| 国产精品美女久久久久久不卡| 精品免费国产一区二区| 日韩在线免费视频观看| 精油按摩中文字幕久久| 高清精品在线| 异国色恋浪漫潭| 亚洲精品一区二区三区婷婷月| 秋霞午夜鲁丝一区二区老狼| 性欧美videoshd高清| 水蜜桃一区二区三区| 日韩精品一区二| 秋霞午夜av一区二区三区| 黄色在线观看视频网站| 视频在线精品一区| 日韩av中文字幕在线播放| 国产伦精品一区二区三区在线观看| 日日夜夜天天综合入口| 在线观看欧美激情| 亚洲午夜久久久影院| 丁香另类激情小说| 日韩国产大片| 成人免费xx| 成人福利网站在线观看| 在线看国产一区| 丝袜美腿亚洲一区二区图片| 僵尸再翻生在线观看| 996这里只有精品| 久久精品91久久香蕉加勒比| 国产欧美一区二区三区鸳鸯浴| 夜色77av精品影院| 猫咪在线永久网站| 亚洲欧美日韩不卡一区二区三区| 永久555www成人免费| 国产欧美视频在线观看| 欧美伦理在线视频| 蜜桃视频在线观看www社区| 国产精品jizz在线观看老狼| 久久国产加勒比精品无码| 国产精品成人午夜| 国产一区欧美| 国外男同性恋在线看| 自拍偷拍第1页| 2021国产精品视频| 欧美日韩专区在线| 久久狠狠亚洲综合| 欧洲一区av| 国产一区二区自拍| 欧美丰满片xxx777| 亚洲电影免费观看高清完整版在线| 综合激情五月婷婷| av超碰在线| 欧美一区2区三区4区公司二百| 亚洲欧美国产精品| 国产精品免费视频观看| 99久久这里只有精品| www.51av欧美视频| 免费男女羞羞的视频网站中文版| 成人午夜电影免费在线观看| 亚洲午夜av久久乱码| 亚洲一区二区精品3399| 久久er精品视频| blacked蜜桃精品一区| 日本在线观看高清完整版| 在线观看的毛片| 青青草久久网络| 国产91精品在线播放| 日韩电影大全免费观看2023年上| 亚洲精品视频免费观看| 美女精品一区二区| 日韩dvd碟片| 国产欧美日韩电影| 久久青青色综合| 亚洲私人影吧|