html怎么防止修改数据,HTML防数据采集
什么是防采集
就是我們想利用爬蟲工具采集某個(gè)網(wǎng)站的數(shù)據(jù)(前提當(dāng)然是公開合法數(shù)據(jù)),但網(wǎng)站不想給你采集而設(shè)置的技術(shù)阻擋措施。
常見的防止采集方案
利用輸入驗(yàn)證碼框驗(yàn)證,在采集某些網(wǎng)站過程中,要求你輸入驗(yàn)證碼,否則就卡住進(jìn)行不下去。這是網(wǎng)站最常用且最基礎(chǔ)的防采措施之一,它要求你必須你手動(dòng)輸入驗(yàn)證碼里的數(shù)字和字母,才能繼續(xù)看到更多信息或者進(jìn)行下一步,以此來判斷你是機(jī)器人還是真人。
滑動(dòng)圖片進(jìn)行拼圖驗(yàn)證,它要求你必須滑動(dòng)拼圖到它指定的位置,才能通過驗(yàn)證進(jìn)行下一步操作。
登錄驗(yàn)證,這類網(wǎng)站通常需要登錄才能看到更豐富的信息,否則只會(huì)展現(xiàn)非常有限的內(nèi)容。
數(shù)據(jù)加密防采集,我們?cè)诰W(wǎng)頁(yè)上看到的內(nèi)容是真實(shí)的,但我們打開源代碼看,這段文字被已經(jīng)被加密分離,這樣當(dāng)我們用爬蟲工具進(jìn)行數(shù)據(jù)采集時(shí),所采集下來的數(shù)據(jù)就是各種亂碼,法整合成一段完整的文字。
反饋虛假數(shù)據(jù),這種防止采集的方案是把虛假的數(shù)據(jù)傳遞給爬蟲工具,從而防止數(shù)據(jù)被采集。
禁止訪問網(wǎng)頁(yè),主要還是看網(wǎng)站的防采機(jī)制設(shè)計(jì),如果觸發(fā)了,通常的結(jié)果就是全面封鎖和禁止。比如封你的賬號(hào)、封你的IP地址。一旦被封鎖,網(wǎng)站會(huì)自動(dòng)給你錯(cuò)誤頁(yè)面或無法讓你正常瀏覽。
如何利用HTML和自定義字體(web-font)來實(shí)現(xiàn)數(shù)據(jù)防采集
web-font是CSS3中的一種標(biāo)記 @font-face,在@font-face聲明里,你可以聲明一種字體,指定這種字體字體庫(kù)文件從網(wǎng)絡(luò)某個(gè)地址下載或直接引用本地的自定義字體文件。例如在css中做如下聲明:
@font-face {
font-family: "icomoon";
src: url("fonts/icomoon.woff") format("woff"),
url("fonts/icomoon.ttf") format("truetype"),
url("fonts/icomoon.eot") format("embedded-opentype"),
url("fonts/icomoon.svg") format("svg");
}
復(fù)制代碼
這樣就成功引入了icomoon這個(gè)自定義字體。
防采集原理:
使用web-font可以從網(wǎng)絡(luò)加載字體,因此我們可以自己創(chuàng)建一套字體,設(shè)置自定義的字符映射關(guān)系表。
例如設(shè)置1f345是映射字符9,1f371是映射字符2,以此類推。
當(dāng)需要顯示字符9時(shí),網(wǎng)頁(yè)的源碼只會(huì)是1f345,被采集的也只會(huì)是1f345,并不是9,使采集者采集不到正確的數(shù)據(jù)。而對(duì)于正常訪問的用戶則沒有影響。對(duì)于中文的防采集不適合使用web-font這種方法,因?yàn)橹形牡淖煮w庫(kù)太大。而對(duì)于數(shù)字,英文則適合使用此方法實(shí)現(xiàn)防采集。
實(shí)例流程:
1.創(chuàng)建指定字符的自定義字體
首先選擇一款字體(免費(fèi)且不受版權(quán)影響的字體),下載好字體可以去FONTEK這個(gè)網(wǎng)站快捷轉(zhuǎn)格式上傳ttf文件,點(diǎn)擊下方的生成,將字體文件轉(zhuǎn)為svg格式。
2.選擇需要使用的字符及設(shè)置字體映射關(guān)系
打開網(wǎng)址:icomoon,選擇左上角“import icons”上傳剛剛生成的svg字體,然后選擇要加密的字符進(jìn)行加密,這里我選擇0-9數(shù)字進(jìn)行加密,選擇完成后點(diǎn)擊右下角Generate Font按鈕。
把名字也按映射關(guān)系修改,設(shè)置映射關(guān)系后,點(diǎn)擊右下角download下載字體。然后將字體文件放到項(xiàng)目中,并在css中聲明引入的字體。
@font-face {
font-family: "icomoon";
src: url("fonts/icomoon.woff") format("woff"),
url("fonts/icomoon.ttf") format("truetype"),
url("fonts/icomoon.eot") format("embedded-opentype"),
url("fonts/icomoon.svg") format("svg");
}
復(fù)制代碼
然后需要定義一個(gè)css的class,font-family使用這個(gè)web-font
.number{
font-family: icomoon;
}
復(fù)制代碼
然后根據(jù)之前修改的映射表在HTML中使用各自數(shù)字對(duì)應(yīng)的映射如下
🍅 🍱 🌏 🏆
復(fù)制代碼
完整HTML代碼如下:
font-family: "icomoon";
src: url("fonts/icomoon.woff") format("woff"),
url("fonts/icomoon.ttf") format("truetype"),
url("fonts/icomoon.eot") format("embedded-opentype"),
url("fonts/icomoon.svg") format("svg");
}
.number{
font-family: icomoon !important;
}
🍅 🍱 🌏 🏆
復(fù)制代碼
運(yùn)行結(jié)果如下:
采集者只能獲取到類似🍅的數(shù)據(jù),并不能知道🍅映射的字符是什么,實(shí)現(xiàn)了數(shù)據(jù)防采集。當(dāng)然采集者可以通過分析,知道每一個(gè)映射代表的意思,從而進(jìn)行采集后轉(zhuǎn)換處理。 我們可以創(chuàng)建多個(gè)不同的字體文件和映射表。每次訪問都隨機(jī)使用一種,并定期更新一批字體文件和映射表,加大采集的難度。 這樣采集者需要把所有的字體文件和映射表都分析并做轉(zhuǎn)換處理,才可能采集到數(shù)據(jù),這樣采集的成本將會(huì)大大增加。(這里前端所展示的數(shù)據(jù)一般都是從后端接口獲取的,所以可以把映射關(guān)系放到后端進(jìn)行處理,前端只負(fù)責(zé)展示編碼即可)
總結(jié)
以上是生活随笔為你收集整理的html怎么防止修改数据,HTML防数据采集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html表单下拉美化教程,用javasc
- 下一篇: bootstrap 图片轮询_消息通知功