1.headers 頭部中 Referer 字段芯杀,user-agent,cookie
新浪的另一個反爬蟲機(jī)制 訪客系統(tǒng) Sina Visitor System
如果不帶cookie訪問微博的頁面的話雅潭,并不會返回正常的頁面而是返回一個“訪客系統(tǒng)”頁面
前段時間爬微博揭厚,用小號模擬登陸,在本地?zé)o需驗(yàn)證碼扶供,在服務(wù)器跑回回出驗(yàn)證碼筛圆,在服務(wù)器端人工登錄多次后,仍無解椿浓。
十分好奇它的常用登錄地機(jī)制太援。難道是服務(wù)器的IP地址早已被列入黑名單?
最后經(jīng)過多次實(shí)驗(yàn)扳碍,它并不判斷常用登錄地提岔,它只在注冊時所在IP不跳驗(yàn)證碼
2.ip池(建立黑IP池),維護(hù)一個cookie池笋敞,定時更新cookie
3.請求的時間窗口過濾統(tǒng)計--time.sleep(random.randint(1, 4))
4.請求頻率--time.sleep(random.randint(1, 4))碱蒙,可能會被nginx令牌限制
5.蜜罐資源-在頁面添加一些正常瀏覽器瀏覽訪問不到的資源,一旦有ip訪問夯巷,過濾下頭部是不是搜素引擎的蜘蛛赛惩,不是就可以直接封了。比如說隱式鏈接趁餐。--通過 is_displayed() 可以判斷元素在頁面上是否可見坊秸。
6.js加密
7.利用前端頁面自定義字體的方式來實(shí)現(xiàn)反爬的技術(shù)手段。具體使用到是 CSS3 中的自定義字體(@font-face)模塊澎怒,自定義字體主要是實(shí)現(xiàn)將自定義的 Web 字體嵌入到指定網(wǎng)頁中去褒搔。這就導(dǎo)致我們?nèi)ヅ廊≌搲拥目诒畷r,獲取到的返回文本中每隔幾個字就出現(xiàn)一個亂碼符號喷面。
每次訪問論壇頁面星瘾,其中字體是不變的,但字符編碼是變化的惧辈。因此琳状,我們需要根據(jù)每次訪問動態(tài)解析字體文件。
具體可以先訪問需要爬取的頁面盒齿,獲取字體文件的動態(tài)訪問地址并下載字體,讀取 js 渲染后的文本內(nèi)容,替換其中的自定義字體編碼為實(shí)際文本編碼肋层,就可復(fù)原網(wǎng)頁為頁面所見內(nèi)容了。
8.驗(yàn)證碼
9.在請求頭中添加 X-Forwarded-For 字段硕盹,將自己申明為一個透明的代理服務(wù)器,一些網(wǎng)站對代理服務(wù)器會手軟一些叨咖。
10.懶加載,js 渲染,動態(tài)加載
11.網(wǎng)站頁面鏈接隨機(jī)化瘩例,同一個頁面有多個鏈接或根據(jù)不同情況生成鏈接
12.增加采集難度,同一類頁面甸各,但是多種模板展現(xiàn)垛贤,一般換了模板,我們就采不到數(shù)據(jù)
13.返回偽造的信息趣倾,假數(shù)據(jù)