如何避免「用隱形鏈接」的反爬蟲技術?

最近在做一個反反爬蟲的研究。
大部分反爬蟲的技術感覺都可以通過學習被避免,但是看到一個反爬蟲的技術:

-----這段描述借用@道哥 幫我修改的,表述比較清楚----
故意設置一個隱藏鏈接讓爬蟲能提取並爬取到,一旦發現該鏈接有被用戶訪問到則判定該用戶為爬蟲,並啟用封禁機制,禁止該用戶後續的訪問行為。

想知道這種方法通用么?有什麼辦法可以反掉么?


題主所說的「隱形鏈接」在一定程度上是能夠防止漫無目的的爬蟲的,但是往往是得不償失的,首先可能會誤傷搜索引擎爬蟲,不利於 SEO;第二是針對特定網站專門編寫的爬蟲,根本就不會踩到這個鏈接;另外有些瀏覽器可能會預載入某些鏈接,意味著正常用戶同樣可能在不知情的情況下「點擊」這個鏈接。所以,一個反爬蟲系統幾乎絕不會根據如此簡單的一個條件就封禁了一個用戶或 IP 。

不過根據寫爬蟲和寫反爬蟲程序經驗,無論一個網站或應用的反爬蟲系統多麼厲害,都幾乎不可能 100% 擋住所有爬蟲,換言之,只要人類能夠正常訪問的網頁,爬蟲在具備同等資源的情況下就一定可以抓取到。而反爬蟲系統存在的意義,就是增大爬蟲的抓取成本。當成本大於收益的時候,出於商業目的的爬蟲就不會再來了(初學者可能還是會來練手)。

關於反爬蟲一般會覆蓋到哪些點,這裡就不再贅述了,之前有一個回答提到過:當爬蟲不遵守 robots 協議時,有沒有防止抓取的可能? - xlzd 的回答(好像回答中的坑還沒有填完……


只能親自渲染一下然後看看這個鏈接是否可見了,現在大的搜索引擎都有這個功能


題主沒說清楚問題?不如反過來問?怎麼區分爬蟲和瀏覽器正常發出的請求?

還是說,把限時或限次生效,或檢驗cookies的搞混了?


。。我說,題主的意思是,如果我的網站不想被爬蟲爬,就故意搞隱藏鏈接被爬蟲b掉。
爬蟲要怎麼避免這種惡意連接的干擾
我猜是這個意思吧。


只能根據爬蟲的閱讀量和規則來屏蔽吧?以前寫過調用WebKit判斷動態載入的js現實動態顯示效果是否正常,記得相當簡單,可以插入自己的mock js,可以偽造瀏覽器,完全和瀏覽器一樣
隱形鏈接可以根據顏色判斷出來啊,插入自己的過濾js都不用改框架和配置


謝邀
爬蟲的原理是爬取頁面上的所有link,所以題主的意思應該是,故意設置一個隱藏鏈接讓爬蟲能提取並爬取到,一旦發現該鏈接有被用戶訪問到則判定該用戶為爬蟲,並啟用封禁機制,禁止該用戶後續的訪問行為。
而要anti-anti-spider也不難,因為普通爬蟲的行為類似Lynx是不會解析js的,所以通常只需要結合css判斷有哪些hidden link就可以了。

而沈萬馬提到的反SEO的意思是反隱藏類黑帽作弊


這就是為啥現在大家都拿Webkit改成爬蟲啊。去搜crawler based on webkit有一大堆。要對付的問題無非就是這麼幾種:
1)後期行為生成/消除的內容
2)人機讀取頁面的行為差異
題主的例子,只要在DOM中找到這個鏈接元素然後去找它對應渲染的頁面上是否存在就行了。這並不是反反爬蟲專用的,事實上用來反SEO這也是常用的方法。


推薦閱讀:

使用Hadoop能做哪些比較有趣的事情?
python關於xpath的一個問題:如何提取某標籤下所有內容?
如何處理python爬蟲ip被封?
怎麼用python爬qq空間的說說列表並保存到本地?
假如你有海量的QQ或者sina微博社交數據,能做哪些有趣的事情?

TAG:網路安全 | 爬蟲計算機網路 |