web爬虫抓取技术的门道,对于网络爬虫技术的攻与防

站长手记 作者: 2024-08-28 14:25:01
从爬虫的攻防角度来讲,最简单的爬虫,是几乎所有服务端、客户端编程语言都支持的http请求,只要向目标页面的url发起一个http get请求,即可获得到浏览器加载这个页面时的完整html文档,这被我们称之为“同步页”。
本文首发于我的个人博客,同步发布于cnode社区,非商业转载请注明出处,商业转载请阅读原文链接里的法律声明。

从爬虫的攻防角度来讲

基于客户端js运行时的检测

基于plugin对象的检查

if(navigator.plugins.length === 0) {
    console.log('It may be Chrome headless');
}

基于language的检查

if(navigator.languages === '') {
    console.log('Chrome headless detected');
}

基于webgl的检查

var canvas = document.createElement('canvas');
var gl = canvas.getContext('webgl');

var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);

if(vendor == 'Brian Paul' && renderer == 'Mesa OffScreen') {
    console.log('Chrome headless detected');
}

基于浏览器hairline特性的检查

if(!Modernizr['hairline']) {
    console.log('It may be Chrome headless');
}

基于错误img src属性生成的img对象的检查

var body = document.getElementsByTagName('body')[0];
var image = document.createElement('img');
image.src = 'http://iloveponeydotcom32188.jg';
image.setAttribute('id', 'fakeimage');
body.appendChild(image);
image.onerror = function(){
    if(image.width == 0 && image.height == 0) {
        console.log('Chrome headless detected');
    }
}
var fakeAlert = (function(){}).bind(null);
console.log(window.alert.toString()); // function alert() { [native code] }
console.log(fakeAlert.toString()); // function () { [native code] }

反爬虫的银弹

机器人协议

写在最后

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_70167.html