Python中如何绕过这种512状态的反爬虫机制?

如图因为一些原因需要爬取 http://www.cnvd.org.cn/漏洞信息 然而请求返回状态为 521,并返回一串代码


<script>var x="return@Oct@window@for@https@false@reverse@setTimeout@while@f@firstChild@h@_phantom@addEventListener@17@substr@if@DOMContentLoaded@innerHTML@e@length@a@i@1509340839@4@catch@995@challenge@__phantomas@cookie@Path@Expires@var@Mon@replace@r@toLowerCase@div@0@cd@2@String@l@eval@document@20@join@30@fromCharCode@createElement@__jsl_clearance@try@location@function@charAt@39@href@match@06@GMT@captcha@1500@x@dc@else@attachEvent@onreadystatechange".replace(/@*$/,"").split("@"),y="11 1b=1m(){9(3.d||3.t){};11 18,20='1j=o.r|17|';11 a=[1m(1v){1 1c('1a.1h('+1v+')')},(1m(){11 c=1d.1i('16');c.j='<m 1p="\\'/\\'">1v</m>';c=c.b.1p;11 14=c.1q(/5?:\\/\\//)[17];c=c.g(14.l).15();1 1m(1v){4(11 n=17;n<1v.l;n++){1v[n]=c.1n(1v[n])};1 1v.1f('')}})()];18=[[(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+((-~[]|19)+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+[~~{}],([19]*((19^-~[]))+[])+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+[~~{}],[-~[]]+[~~{}]+([19]*((19^-~[]))+[])],[([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[]),([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[])],[[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[]),(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+([19]*((19^-~[]))+[]),[-~[]]+[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]]),(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[])+[-~[]]],[[-~[]]+[~~{}]],[[-~[]]+[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]]),(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[])+[p],(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+((-~{}<<-~{})+[]+[[]][~~[]]),([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[])+[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))],[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]])+[~~{}],[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))],[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]])+[~~{}],(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),[-~[]]+[~~{}]+([19]*((19^-~[]))+[])],[[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]],[[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),((-~[]|19)+[]+[])+[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))],(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[])+[-~[]],([19]*((19^-~[]))+[])+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])]];4(11 n=17;n<18.l;n++){18[n]=a.7()[[-~[]]](18[n])};18=18.1f('');20+=18;8('1l.1p=1l.1p.13(/[\\?|&]1t-s/,\\'\\')',1u);1d.u=(20+';10=12, 1g-2-f 1r:1e:1o 1s;v=/;');};h((1m(){1k{1 !!3.e;}q(k){1 6;}})()){1d.e('i',1b,6);}21{1d.22('23',1b);}",z=0,f=function(x,y){var a=0,b=0,c=0;x=x.split("");y=y||99;while((a=x.shift())&&(b=a.charCodeAt(0)-77.5))c=(Math.abs(b)<13?(b+48.5):parseInt(a,36))+y*c;return c},g=y.match(/\b\w+\b/g).sort(function(x,y){return f(x)-f(y)}).pop();while(f(g,++z)-x.length){};eval(y.replace(/\b\w+\b/g, function(y){return x[f(y,z)-1]}));</script>

正常访问没问题,curl,requests 请求就返回 521
考虑到效率问题和环境问题,暂时没打算用 phtomjs 等
请问这种反爬虫是根据什么判断的,或者说该怎么绕过呢?


Python中如何绕过这种512状态的反爬虫机制?

22 回复

你连***ra***t 都不知道还做什么爬虫啊?


我无法理解你的问题。

这代码有点像 brainfuck

直接模拟运行这段取 cookies 试试看

??什么
不知道呀
模拟运行这段是什么意思,请求的时候加了 cookie 和 headers

重启一下路由用爬虫再爬 有问题么?

这似乎是一段 javascript 模拟运行后拿运行 js 后的 cookie 加上去

网上搜索了下,这是知道创宇云安全上的反爬功能。

一段 javascript 混淆后的代码,主要两个作用,
1.屏蔽一些不能执行 js 的爬虫,屏蔽模拟浏览器的爬虫。
2.设置特定的 cookies。下次发送请求的时候,返回就正常了。





这是知道创宇加速乐的一个反爬虫机制,看到上面文章里的分析文章,加上了__jsl_clearance 和__jsluid 值还是返回 521

难道升级了策略。。。

第一次请求会 set-cookies,
把 cookie 带上再请求一次就可以了。

第一次请求


第二次请求

curl ‘http://www.cnvd.org.cn/flaw/list.htm’ -H ‘Host: www.cnvd.org.cn’ -H ‘User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0’ -H ‘Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8’ -H ‘Accept-Language: en-US,en;q=0.5’ --compressed -H ‘Referer: http://www.cnvd.org.cn/’ -H ‘Cookie: __jsluid=f669604ddecafb6c40a2a3829f39742f; __jsl_clearance=1509349167.145|0|wMTYJSR%2Fl5astzWDPI574Q%2FYYOc%3D; JSESSIONID=522CF658C2D3044420A6B1FFC1EE004E; bdshare_firstime=1509349155230’ -H ‘Connection: keep-alive’ -H ‘Upgrade-Insecure-Requests: 1’ -H ‘Cache-Control: max-age=0’

把头带全就行了,这网站把你作宝搞

楼上都说了方法了

这个不太清楚,可能是我姿势不对
我自己加了__jsl_clearance 和__jsluid 还是 521
你试过成功了吗?我没成功,还是 521
这个确实没成功

试了一下,确实有点麻烦,不太清楚他的机制,不过用 puppetter 是一定可以的。我觉得非常规站就用非常规的爬法。

看代码,全部 copy headers 是可以的

先用 selenium 来访问首页,然后将 cookie 传给 requests
接下来就可以用 requests 来抓取了
注意 requests 和 selenium webdriver 的 user-agent 要一致

请问一下楼主最后怎么解决这个问题哒

你截图用这个是什么工具呀? 最近想爬个网站也遇上 加速乐 cookie 问题了,可否付费请教一下你

回到顶部