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

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 条回复
PythoneerDev6
2017-10-09 20:19:24 +08:00
@CareiOS 许久未试
jijiwaiwai
2017-10-09 21:26:43 +08:00
@chen2016 你的代码问题
chen2016
2017-10-09 21:40:34 +08:00
@jijiwaiwai 已经不用 execjs 了,看最后
fuxkcsdn
2017-10-09 21:47:26 +08:00
@jadec0der 肯定是去哪儿,携程的技术实力在去哪儿面前…
爬过最难的是去哪儿,不用 headless 浏览器简直难爬,曾尝试跟踪解密 js,跟踪了半天被叫去做其他事,之后再没心情弄了…
swirling
2017-10-09 22:01:43 +08:00
我最近很烦 silverlight 数据传输通过 WCF 传输 contenttype 是 msbin 1
大概是我没见过世间险恶吧
AlwaysBehave
2017-10-09 22:18:18 +08:00
opengps
2017-10-09 23:30:51 +08:00
我说个吧,很多人好奇为啥方式不能偷我接口,原因是,没有 reffer 的都被我关闭了输出,就这样很多人第一步没走通就不走了
doubleflower
2017-10-10 00:03:10 +08:00
@anoymoux 搞这么费劲其实真要破也容易,用个 headless 浏览器,用 js 判断这个 li 的样式是否被隐藏了。
shiny
2017-10-10 00:07:09 +08:00
@opengps 确实可以挡掉大部分小白用户,但如果是专业选手,第一件事情应该是完全模拟浏览器发出的请求。
Lguo
2017-10-10 01:27:20 +08:00
请教一下各位兄弟们这个代理网站列出来的端口要怎么抓 http://www.goubanjia.com/
RqPS6rhmP3Nyn3Tm
2017-10-10 05:36:27 +08:00
我遇到最恶心的是哔哩哔哩,appkey 混淆得没法看
最后乖乖 youtube-dl
gfcddz
2017-10-10 08:45:32 +08:00
国外的一个全站 http/2.0 协议,python 支持 http2.0 的库压根用不了,只能用 seleniim 了
kran
2017-10-10 08:48:31 +08:00
投毒假数据啊,最坑的一次,见过一本写神经病的小说,看了两章胡言乱语才发现是网站爬虫被投假数据。文笔不错,没得逻辑。
Marsss
2017-10-10 08:52:10 +08:00
遇到最恶心的是 js 检测是否有鼠标操作且正常,并将其一并参与请求。
opengps
2017-10-10 08:56:20 +08:00
@shiny 的确,不过起码这个成为我目前最基本的条件,很多人是因为顺便看了一眼可以利用,才做了进一步的决定
grey0207
2017-10-10 09:31:08 +08:00
这个网站的源图片都打乱的,又禁止右键,感觉要抓图只能靠截图了
http://viewer.comic-earthstar.jp/viewer.html?cid=1e48c4420b7073bc11916c6c1de226bb&cty=1&lin=0
qqpkat2
2017-10-10 09:36:29 +08:00
这种反扒太简单了,程序内嵌浏览器直接破了
遇到最厉害的还是百度的,提交的时候记录了鼠标动作.....不过还是能破解
wfd0807
2017-10-10 09:47:32 +08:00
这个还算简单,毕竟可以分析出来,解密过程不依赖浏览器;
看看汽车之家的反爬虫技术,用伪元素的 text 渲染文字。。。
ZiLong
2017-10-10 09:54:15 +08:00
@qqpkat2 这种怎么玩?记录的鼠标动作重放应该还有效吧?
BlackGrasshopper
2017-10-10 10:19:28 +08:00
@grey0207 这个网址厉害了

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

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

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

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

© 2021 V2EX