對於一張網頁,咱們每每但願它是結構良好,內容清晰的,這樣搜索引擎才能準確地認知它。css
而反過來,又有一些情景,咱們不但願內容能被輕易獲取,比方說電商網站的交易額,教育網站的題目等。由於這些內容,每每是一個產品的生命線,必須作到有效地保護。這就是爬蟲與反爬蟲這一話題的由來。html
可是世界上沒有一個網站,能作到完美地反爬蟲。前端
若是頁面但願能在用戶面前正常展現,同時又不給爬蟲機會,就必需要作到識別真人與機器人。所以工程師們作了各類嘗試,這些策略大多采用於後端,也是目前比較常規單有效的手段,好比:算法
而爬蟲是能夠無限逼近於真人的,好比:chrome
因此咱們說,100%的反爬蟲策略?不存在的。
更多的是體力活,是個難易程度的問題。編程
不過做爲前端工程師,咱們能夠增長一下游戲難度,設計出一些很(sang)有(xin)意(bing)思(kuang)的反爬蟲策略。後端
例子:貓眼電影瀏覽器
貓眼電影裏,對於票房數據,展現的並非純粹的數字。
頁面使用了font-face定義了字符集,並經過unicode去映射展現。也就是說,除去圖像識別,必須同時爬取字符集,才能識別出數字。微信
而且,每次刷新頁面,字符集的url都是有變化的,無疑更大難度地增長了爬取成本。前端工程師
例子:美團
與font的策略相似,美團裏用到的是background拼湊。數字實際上是圖片,根據不一樣的background偏移,顯示出不一樣的字符。
而且不一樣頁面,圖片的字符排序也是有區別的。不過理論上只需生成0-9與小數點,爲什麼有重複字符就不是很懂。
頁面A:
頁面B:
例子:微信公衆號文章
某些微信公衆號的文章裏,穿插了各類迷之字符,而且經過樣式把這些字符隱藏掉。
這種方式雖然使人震驚…但其實沒有太大的識別與過濾難度,甚至能夠作得更好,不過也算是一種腦洞吧。
對了,個人手機流量能夠找誰報銷嗎?
例子:汽車之家
汽車之家裏,把關鍵的廠商信息,作到了僞元素的content裏。
這也是一種思路:爬取網頁,必須得解析css,須要拿到僞元素的content,這就提高了爬蟲的難度。
例子:去哪兒
還有熱愛數學的去哪兒,對於一個4位數字的機票價格,先用四個i
標籤渲染,再用兩個b
標籤去絕對定位偏移量,覆蓋故意展現錯誤的i
標籤,最後在視覺上造成正確的價格…
這說明爬蟲會解析css還不行,還得會作數學題。
例子:網易雲音樂
網易雲音樂頁面一打開,html源碼裏幾乎只有一個iframe
,而且它的src是空白的:about:blank
。接着js開始運行,把整個頁面的框架異步塞到了iframe裏面…
不過這個方式帶來的難度並不大,只是在異步與iframe處理上繞了個彎(或者有其餘緣由,不徹底是基於反爬蟲考慮),不管你是用selenium仍是phantom,都有API能夠拿到iframe裏面的content信息。
例子:全網代理IP
在一些展現代理IP信息的頁面,對於IP的保護也是大費周折。
他們會先把IP的數字與符號分割成dom節點,再在中間插入迷惑人的數字,若是爬蟲不知道這個策略,還會覺得本身成功拿到了數值;不過若是爬蟲注意到,就很好解決了。
例子:去哪兒移動側
一樣會欺騙爬蟲的還有去哪兒的移動版。
html裏明明寫的3211,視覺上展現的倒是1233。原來他們從新定義了字符集,3與1的順序恰好調換得來的結果…
若是你對爬蟲有興趣!咱們公司能夠提供很好的平臺。下面貼出來咱們公司招聘(點擊),若是對職位有興趣,能夠私聊發送給我簡歷。
公司簡介: 互聯網時代信息無處不在,咱們平常所接觸的大量信息例如微博、社交媒體網站的帖子、消費者點評、新聞、銷售人員的拜訪記錄,這些都是常見的非結構化數據來源。
非結構化數據分析可以揭示潛藏在文本當中的趨勢和關聯,爲商業決策、研究行業趨勢和熱點內容分析提供有力支持。
山東緯橫數據公司是一家以互聯網搜索引擎技術爲導向的大數據分析服務商,專一爲用戶創建數據資產,提供互聯網數據監測和數據分析服務,並實現其價值。
公司主要面向醫院、醫療、食品、藥品、在線旅遊、健康等領域提供數據分析、數據挖掘、輿情監控等技術服務。
緯橫團隊致力於打造最出色的中文語義分析技術,經過自主研發的中文分詞、句法分析、搜素引擎和實體識別技術,結合海量行業語料的不斷積累,
爲企業客戶(營銷、公關、客服、銷售和產品部門)、研究機構和政府部門等提供數據監測和採集、分析和可視化以及專業服務,加強用戶在大數據時代的競爭力。
後端工程師 招聘人數:1
崗位職責
1. 分佈式網頁抓取平臺的研發、完善和運維,天天支持數千萬級的網頁採集、清洗和分析;
2. 產品後端 API 的開發,實現高性能、高可用及可擴展的後端代碼;
3. 線上分佈式環境的自動化運維、監控、性能調優。
職位要求
1. 紮實的算法與數據結構功底,對新的知識和技術有強烈熱情;
2. 具備較強的分析和解決問題的能力;
3. 擁有良好的編程習慣;
4. 熟悉至少一門高級編程語言(例如 Python/C++/JAVA )並有實際開發的經驗。
工做地點
煙臺市高新區
原連接:http://litten.me/2017/07/09/prevent-spiders/