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

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

20668 次点击
所在节点    程序员
75 条回复
jas0ndyq
2017-10-09 15:39:41 +08:00
也做过和 lz 一样的事情
bearsiji
2017-10-09 15:40:28 +08:00
类似这种的 多重混淆 一层套一层 酸爽
PythoneerDev6
2017-10-09 15:49:14 +08:00
之前爬过 汤不热。 源代码放在 github 上,star 达到 2k 之后。 汤不热就开始做反扒。

给 next 的标签加了一个空格。 也是雷到我了。

https://github.com/xiyouMc/WebHubBot
jijiwaiwai
2017-10-09 15:49:17 +08:00
你这个办法很笨的。。。
直接使用 pyv8,调用 js 函数获取返回值就行了
chen2016
2017-10-09 15:51:59 +08:00
@jijiwaiwai #4 试过了,会出错
mansur
2017-10-09 15:56:29 +08:00
最厉害的是投毒,缠假内容
af463419014
2017-10-09 15:58:27 +08:00
后台检测到肯定是爬虫的时候,不禁止访问,装作正常的页面,返回错误的数据
crab
2017-10-09 15:58:31 +08:00
这种算好了,直接拿它 js 解密。
最厉害的应该是发现你是爬虫,不拒绝你,继续让你爬,但给脏数据。
xujialiang
2017-10-09 15:58:38 +08:00
哈哈哈 我会用 node 写一个接口,然后调接口
clino
2017-10-09 15:59:04 +08:00
以前不是有看过变成竖排文的办法,不知道效果如何
nikoo
2017-10-09 16:03:26 +08:00
怎么把汉字转为楼主贴的这种数字?
kbdancer
2017-10-09 16:13:00 +08:00
phantomJS 直接解析执行 js 或者自定义执行 js 脚本
lizon
2017-10-09 16:29:49 +08:00
根本不知道怎么触发的反爬机制,返回一些错误数据混在正确数据里
Luckyray
2017-10-09 16:31:33 +08:00
这种乱七八糟的就直接用 chrome driver 了...重写一遍还不够麻烦的
murmur
2017-10-09 16:32:51 +08:00
能被你发现的都是小 case

真正发现不了的都是用投毒的
ytmsdy
2017-10-09 16:35:34 +08:00
最惨的就是掉进蜜罐里面,爬虫一切正常,但是返回的数据都是假数据。
最可怕的就是掉进去了,你还不知道!!还在那里很开心的爬,等爬完了,看到结果就 SB 了。
luoshuangfw
2017-10-09 16:46:49 +08:00
楼主你看这函数名不是很明确吗,这就是把变长编码的 utf8 转换成定长编码的 utf16 的非常标准的做法啊,我觉得压根不是在加解密
Xrong
2017-10-09 16:49:47 +08:00
有见过免费代理 IP 池网站,IP 最后一段是用 CSS 展示出来的。。。
zbl430
2017-10-09 16:52:02 +08:00
http://wsjs.saic.gov.cn/

这个网站,挺恶心的
anoymoux
2017-10-09 16:56:09 +08:00
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
<li>X</li>
...
...
</ul>

你需要的数据是 X,但是他会生成很多的垃圾数据 A,B,C 等等..X 出现的位置是随机的,而且 A,B,C 等垃圾数据的格式跟 X 相同,无法用正则区分.
然后每个 li 都有一个随机的 class 属性,用动态生成的 css 样式控制只显示 X,其他的隐藏掉....
另外 css 用了继承,嵌套还有复杂的计算等等

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

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

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

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

© 2021 V2EX