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

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 搬过来照用。。

20911 次点击
所在节点    程序员
75 条回复
annielong
2017-10-09 16:57:32 +08:00
汤不热还是使用 api 抓取比较好,
vtwoextb
2017-10-09 17:02:33 +08:00
京东防爬, 我用的是 动态 ip 策略 https://github.com/hizdm/dynamic_ip
xxdd
2017-10-09 17:19:29 +08:00
@zbl430 不是国家上了反爬 好多商标平台都要倒闭了
CareiOS
2017-10-09 17:19:37 +08:00
@PythoneerDev6 你源码,现在还工作吗?
chen2016
2017-10-09 17:25:01 +08:00
catfish
2017-10-09 17:30:57 +08:00
给假数据
zbl430
2017-10-09 17:39:07 +08:00
@xxdd 又不是什么值钱的内容吧,何必呢
macleek
2017-10-09 17:45:31 +08:00
@xxdd 为啥上了反爬才不会倒闭啊?
PythonAnswer
2017-10-09 17:54:11 +08:00
蜜罐,文字嵌图
abcbuzhiming
2017-10-09 18:24:40 +08:00
其实我觉得再牛逼的反爬都对付不了真浏览器,所以我觉得无头浏览器才是未来主流技术
jadec0der
2017-10-09 18:27:51 +08:00
携程还是去哪儿,价格数字用一种随机字体,比如 7 在这个字体里可能是 4
yu099
2017-10-09 18:49:16 +08:00
@abcbuzhiming 我看到有加挖矿 JS 的做反爬,如果像淘宝一样屏蔽跟踪 JS 就触反爬怎么办?
NsLib
2017-10-09 19:26:09 +08:00
前去哪儿员工,你可以试试爬爬看,假数据、前端混淆、字体混淆,23333 ……
airbasic
2017-10-09 19:39:59 +08:00
猫眼的票房=。= 得用图像识别
j3n5en
2017-10-09 19:43:01 +08:00
啧,这不是黑科云么,。。。,我前两天刚写完。。。。
chen2016
2017-10-09 20:03:04 +08:00
@j3n5en 你说的没错,就是某科云
abcbuzhiming
2017-10-09 20:04:43 +08:00
@yu099 它一定要探测你也是没办法的,所以爬虫这玩意就是比拼服务器,你服务器众多,伪装的像正常浏览器,它就没招了是不是
j3n5en
2017-10-09 20:06:00 +08:00
@chen2016 #36 我是用 nodejs 写的,,,所以复制过去就可以了,,,,嘻嘻嘻
chen2016
2017-10-09 20:10:59 +08:00
@j3n5en 我用 python 重写了这部分,几行搞定了
scriptB0y
2017-10-09 20:15:50 +08:00
碰到过一个页码记录在 session 中的,也就是你每次发一样的 curl,结果是不一样的…… session 是通过一个 cookie 判断的……不知道算不算反爬

另外记录了一些遇到过的垃圾网站:

https://www.kawabangga.com/posts/2017

https://www.kawabangga.com/posts/2240

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

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

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

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

© 2021 V2EX