写爬虫的时候你遇到过哪些厉害的反爬手段?

2017-10-09 15:07:35 +08:00
 chen2016

这里举个例子,某磁力离线云,对数据标题进行加密。

前端展示是这样的: 源码是这样的: 就是一堆数字

52297·61356·11868·62314·51679·41594·12321·21896·91661·62294·01438·51845·12308·51567·21864·7468·12335·61597·31691·22328·61750·61738·82280·11847·91732·82298·01739·71515·8460·1650·0461·7843·4976·51209·51055·8466·0684·51144·71059·61183·71014·91142·2468·0500·6489·2494·0550·7465·9728·5683·4556·8503·6489·1800·4461·0881·1505·7543·7528·0462·7654·8659·6676·1469·4677·9727·0830·9453·7561·9565·8509·0701·8882·3469·41090·11072·01184

解密方式是这样的:

$("[decode=true]").each(function () { var obj = $(this); var text = obj.text(); text = text.split("·"); var str = ''; for (var i = 0, len = text.length; i < len; ++i) { text[i] = text[i].substr(1); text[i] = text[i].substring(0, text[i].length - 1); str += String.fromCharCode(text[i]) } obj.text(utf8to16(str)); obj.removeAttr("decode"); });

 function utf8to16(str) {
            var out, i, len, c;
            var char2, char3;

            out = "";
            len = str.length;
            i = 0;
            while (i < len) {
                c = str.charCodeAt(i++);
                switch (c >> 4) {
                    case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
                        // 0xxxxxxx
                        out += str.charAt(i - 1);
                        break;
                    case 12: case 13:
                        // 110x xxxx   10xx xxxx
                        char2 = str.charCodeAt(i++);
                        out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
                        break;
                    case 14:
                        // 1110 xxxx  10xx xxxx  10xx xxxx
                        char2 = str.charCodeAt(i++);
                        char3 = str.charCodeAt(i++);
                        out += String.fromCharCode(((c & 0x0F) << 12) |
                                       ((char2 & 0x3F) << 6) |
                                       ((char3 & 0x3F) << 0));
                        break;
                }
            }
            return out;
        }


原本想要用 python 重写这个解密过程,但是发现挺麻烦的,基于“反正都是在网页上展示内容”,干脆将他的解密 js 搬过来照用。。

21022 次点击
所在节点    程序员
75 条回复
huangfs
2017-10-10 10:25:38 +08:00
最恶心的应该是不限制你 但是给假数据吧 这种真的防不胜防。
sucaihuo
2017-10-10 10:32:02 +08:00
从来没研究过这方面,要学的东西还真多啊
wmhx
2017-10-10 10:44:56 +08:00
之前搞刷单用 paypal 支付, 先是写代码全程模拟结果发现 paypal 的 js 请求参数和名称全是动态生成,没找到规律,就换了 seleniim, 结果检测是否是 robot,用的是一家以色列公司的技术,花了近 2 周时间没搞定, 后来一查,这家牛逼的公司首页就说,如果用了他的技术被 robot 操作了. 全额赔付.
xxdd
2017-10-10 10:53:07 +08:00
@wmhx 感觉以色列 it 很强啊
qqpkat2
2017-10-10 13:12:32 +08:00
@ZiLong 鼠标移动轨迹你记录给我看看?
Felldeadbird
2017-10-10 13:16:22 +08:00
目前遇到过最搞笑的:
客服:某个网站的价格爬取失效了。快去看看

我认真观看后,发现他们价格要登录才可以看到价格。
终于弄好了。准备上线。

客服:那个网站价格爬取正常了。
我再去看了一下……原来是他们网站出问题了= =。导致非会员价格不显示。
yxy2829
2017-10-10 14:07:03 +08:00
各种验证码算吗?一堆汉字里面选四字成语,按顺序点击
SlipStupig
2017-10-10 14:15:09 +08:00
数据真假掺着来....
ZiLong
2017-10-10 14:26:35 +08:00
@qqpkat2 不懂,还请赐教
qqpkat2
2017-10-10 15:33:06 +08:00
@ZiLong 不指教不指教
wineast
2017-10-10 20:25:55 +08:00
@Lguo 解析下 xml,class 里面含有 port 不就行了?
ZiLong
2017-10-10 23:53:38 +08:00
@qqpkat2 haha,3ks for u's tan cheng
qqpkat2
2017-10-11 02:26:30 +08:00
@ZiLong 程序内嵌浏览器调用鼠标移动 API 即可
Lguo
2017-10-11 07:54:22 +08:00
@wineast 感谢回复,那个是假的
mingyun
2017-10-29 14:21:29 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396175

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX