玩Python第一次见到这种反爬虫? 咋办? 盘它!

今天在工作中,碰到了第一次碰见的反爬虫机制,感觉很有意思,在这里记录一下,希望对大家有帮助。

今天用到的库

requests [请求]
lzstring [解压数据]
pyexecjs [执行JS]

简单粗暴,直接上网站部分源代码,因为这个网站应该不太希望别人来爬,所以就不上网站了。为什么这么说,因为刚开始请求的时候,老是给我返回GO TO HELL ,哈哈。

这个网站点击鼠标右键审查元素,查看网页源代码是无法用的,但是这个好像只能防住小白啊,简单的按F12审查元素,CTRL+u 直接查看源代码(谷歌浏览器)

这次的目的主要是为了获取下面的链接(重度打码)

xxxxxxxxxxx/xxxxx-003-a5f7xxxxxx?cid=xxxxx&xxx=siOE_q4XxBtwdoXqD0xxxx

其中,红色加粗的就是我们要找的变量了。

一、观察与抓包

首先,我观察到了网页源代码中的一部分js代码:


type=”text/javascript”>window[“\x65\x76\x61\x6c“](function(p,a,c,k,e,d){e=function(c){return(c<a?””:e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!”.replace(/^/,String)){while(c–)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return’\\w+’};c=1;};while(c–)if(k[c])p=p.replace(new RegExp(‘\\b’+e(c)+’\\b’,’g’),k[c]);return p;}(‘29.2a({“2c”:1k,”26″:”21″,”22″:”1k.24″,”2o”:2n,”2s”:”2r”,”2l”:[“0-2f-2e.3.2″,”0-2j-2i.3.2″,”0-1r-1L.3.2″,”0-1r-1K.3.2″,”0-1e-1X.3.2″,”0-1e-1Q.3.2″,”0-1x-1W.3.2″,”0-1x-1M.3.2″,”0-1B-33.3.2″,”0-1B-36.3.2″,”0-1F-30.3.2″,”0-1F-2U.3.2″,”0-1g-2Y.3.2″,”0-1g-3e.3.2″,”0-1q-3i.3.2″,”0-1q-38.3.2″,”0-1o-37.3.2″,”0-1o-3a.3.2″,”0-1s-2B.3.2″,”0-1s-2E.3.2″,”0-1i-2v.3.2″,”0-1i-2y.3.2″,”0-1G-2P.3.2″,”0-1G-2S.3.2″,”0-1E-2R.3.2″,”0-1E-2H.3.2″,”0-1I-2L.3.2″,”0-1I-2J.3.2″,”0-t-2K.3.2″,”0-t-2G.3.2″,”0-p-2I.3.2″,”0-p-2M.3.2″,”0-o-2Q.3.2″,”0-o-2N.3.2″,”0-u-2O.3.2″,”0-u-2w.3.2″,”0-D-2x.3.2″,”0-D-2t.3.2″,”0-z-2u.3.2″,”0-z-2z.3.2″,”0-y-2D.3.2″,”0-y-2F.3.2″,”0-7-2A.3.2″,”0-7-2C.3.2″,”0-5-2T.3.2″,”0-5-3b.3.2″,”0-4-3c.3.2″,”0-4-39.3.2″,”0-g-3d.3.2″,”0-g-3h.3.2″,”0-i-3j.3.2″,”0-i-3f.3.2″,”0-b-3g.3.2″,”0-b-2X.3.2″,”0-d-2Z.3.2″,”0-d-2V.3.2″,”0-11-2W.3.2″,”0-11-34.3.2″,”0-13-35.3.2″,”0-13-31.3.2″,”0-10-32.3.2″,”0-10-1J.3.2″,”0-15-1O.3.2″,”0-15-1P.3.2″,”0-1d-1R.3.2”,……………………………………,’M4UxFsAsB9odxAIwA7WQOwObQAwCYBWXPAFlwHYBmY6ncousuvYgDlwDZ38BOT8zn3wcKARmICKOXK1qsmrFjlHdRAnKxEb1rBqK2ih5dSSbkteJXnEbpGm+SF47HLZSEElBOwRsEmlOqU3AS0JHYkWiRKJAwkYTYkQiQmIQwcShy0HDaUSpQuDJQ2HAG0BEFFWgTVQhw+3JRMOEw8Shq4PK……………………………………..GHXTzLjxjzN5CziB+3ODSAhicwuCyeBJ3YJD+eKhEi83fHm76PmK3Y/htPJFzw8LzOCqKTMcXGHr7Jm/nlPtuSUfPBAA===‘[‘\x73\x70\x6c\x69\x63‘](‘\x7c‘),0,{}))

为了节省篇幅,我把一些替换成…….了。如果你对这些数据的解压有兴趣,请联系我。

我第一眼看见时,做了2件事:

1、把[\x65\x76\x61\x6c],[ \x73\x70\x6c\x69\x63],[\x7c]分别解码,解码出的结果为eval和splic,| ;

注:其实这里看到eval时就应该想到可以试试直接用pyexecjs执行后面的那段js匿名函数,但是当时确实啥都没有想起来,很惭愧,后来复盘时才发现这一点。虽然执行了也会报错。

2、把那一长串的字母试着用base64解码了,但是解不出来;

然后,就只能再去其他js文件里找了,也找到了js代码,打了断点,但是看着还是很烦,于是这个时候我就没有在js上面死抠。

接着,我调转了方向,在GITHUB,Google运用了我祖传的高级搜索技巧,Finally,终于可以盘它了。

二、解密

下面开始解密:

1、数据解压

包含A===的字符串到底时啥呢,其实这个是js的一种数据的压缩方式,知道了这种方式你就可以立即破解这种反爬虫机制了,反正我以前是不知道的,第一次见到,学习了。

在这里,lzstring闪亮登场,运用这个库,执行下面的代码:

lzstring.LZString().decompressFromBase64(string)

这样就可以把上面的那串字符给解码了,解出来的数据像下面这样:

**webp|png|025|024|073**

没错,数据解压就是这么的简单;

2、看懂JS

我们在上面解码出来了一个splic和一个[ | ],再看看我们上面解压出来的数据,是不是很有感觉;但是,查了好一会资料,也没有发现js里面有这个方法,可能是在别的地方定义了;在我找到的资料里面,那个作者是直接用了split,最后的结果是对的,走逻辑上也说得过去,不知道为什么这么设置成splic,还希望有大神可以指教;

3、执行JS

所以,到这里就很明显了,把解码以后以及解压以后的数据在替换会原js数据中,我们前面解码出来的eval就有用了,我找到的资料里面作者使用node做的,我没有安装node环境,所以我就直接用了pyexecjs.eval直接执行了,结果也正确;

4、梳理流程

匹配长字符串==>lzstring解压+解码后的字段==>拼凑成新的js代码==>pyexecjs执行==>出结果

5、部分代码

执行的主要步骤和结果

execjs.eval(res)

没错,就是这么简单,res就是替换后的js,然后就可以直接出来我们上面网址中需要的两个字段了。

截个图吧

如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

三、结语

到这里,今天的文章就结束了,总结一下就是知道了一种JS数据的压缩方式,并且学习了解压的方式,JS的执行,同时写代码的时候**多观察,多想,多试**。

原文地址:https://blog.51cto.com/14510224/2435944

时间: 2024-11-05 13:35:47

玩Python第一次见到这种反爬虫? 咋办? 盘它!的相关文章

Python爬虫?今天教大家玩更厉害的,反爬虫操作!零基础都能写!

主要针对以下四种反爬技术:Useragent过滤:模糊的Javascript重定向:验证码:请求头一致性检查.高级网络爬虫技术:绕过 "403 Forbidden",验证码等 爬虫的完整代码可以在 github 上对应的仓库里找到. 我从不把爬取网页当做是我的一个爱好或者其他什么东西,但是我确实用网络爬虫做过很多事情.因为我所处理的许多工作都要求我得到无法以其他方式获得的数据.我需要为 Intoli 做关于游戏数据的静态分析,所以我爬取了Google应用商店的数据来寻找最新被下载的AP

python解决网站的反爬虫策略

网站的反爬虫策略: 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分.这里我们只讨论数据采集部分. 一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式.前两种比较容易遇到,大多数网站都从这些角度来反爬虫.第三种一些应用ajax的网站会采用,这样增大了爬取的难度(防止静态爬虫使用ajax技术动态加载页面). 1.从用户请求的Headers反爬虫是最常见的反爬虫策略. 伪装header.很多网站都会对Headers的User-Agent进行检测,还有一部分网站

爬虫与反爬虫

转自:https://mp.weixin.qq.com/s/-w-yC6PCdTOpfKS8HZEleA 前言 爬虫与反爬虫,是一个很不阳光的行业. 这里说的不阳光,有两个含义. 第一是,这个行业是隐藏在地下的,一般很少被曝光出来.很多公司对外都不会宣称自己有爬虫团队,甚至隐瞒自己有反爬虫团队的事实.这可能是出于公司战略角度来看的,与技术无关. 第二是,这个行业并不是一个很积极向上的行业.很多人在这个行业摸爬滚打了多年,积攒了大量的经验,但是悲哀的发现,这些经验很难兑换成闪光的简历.面试的时候,

Python爬虫与反爬虫(7)

[Python基础知识]Python爬虫与反爬虫(7) 很久没有补爬虫了,相信在白蚁二周年庆的活动大厅比赛中遇到了关于反爬虫的问题吧 这节我会做个基本分享. 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分. 一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式.前两种比较容易遇到,大多数网站都从这些角度来反爬虫.第三种一些应用ajax的网站会采用,这样增大了爬取的难度. user-agent 最简单的反爬虫机制,应该算是U-A校验了.浏览器在发送请求的时候

大厂在用的Python反爬虫手段,破了它!

SVG 映射反爬虫 SVG 是用于描述二维矢量图形的一种图形格式.它基于 XML 描述图形,对图形进行放大或缩小操作都不会影响图形质量.矢量图形的这个特点使得它被广泛应用在 Web 网站中. 接下来我们要了解的反爬虫手段正是利用 SVG 实现的,这种反爬虫手段用矢量图形代替具体的文字,不会影响用户正常阅读,但爬虫程序却无法像读取文字那样获得 SVG 图形中的内容.由于 SVG 中的图形代表的也是一个个文字,所以在使用时必须在后端或前端将真实的文字与对应的 SVG 图形进行映射和替换,这种反爬虫手

python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性)

python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性) 目录 随机User-Agent 获取代理ip 检测代理ip可用性 随机User-Agent fake_useragent库,伪装请求头 from fake_useragent import UserAgent ua = UserAgent() # ie浏览器的user agent print(ua.ie) # opera浏览器 print(ua.opera) # chrome浏览器 print(ua.chro

python网络爬虫 - 如何伪装逃过反爬虫程序

有的时候,我们本来写得好好的爬虫代码,之前还运行得Ok, 一下子突然报错了. 报错信息如下: Http 800 Internal internet error 这是因为你的对象网站设置了反爬虫程序,如果用现有的爬虫代码,会被拒绝. 之前正常的爬虫代码如下: from urllib.request import urlopen ... html = urlopen(scrapeUrl) bsObj = BeautifulSoup(html.read(), "html.parser") 这

【Python】爬虫与反爬虫大战

爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序反爬虫:使用技术手段防止爬虫程序爬取数据误伤:反爬虫技术将普通用户识别为爬虫,这种情况多出现在封ip中,例如学校网络.小区网络再或者网络网络都是共享一个公共ip,这个时候如果是封ip就会导致很多正常访问的用户也无法获取到数据.所以相对来说封ip的策略不是特别好,通常都是禁止某ip一段时间访问.成本:反爬虫也是需要人力和机器成本拦截:成功拦截爬虫,一般拦截率越高,

Python Scrapy反爬虫常见解决方案(包含5种方法)

爬虫的本质就是“抓取”第二方网站中有价值的数据,因此,每个网站都会或多或少地采用一些反爬虫技术来防范爬虫.比如前面介绍的通过 User-Agent 请求头验证是否为浏览器.使用 JavaScript 动态加载资源等,这些都是常规的反爬虫手段. 下面针对更强的反爬虫技术提供一些解决方案. IP 地址验证 有些网站会使用 IP 地址验证进行反爬虫处理,程序会检查客户端的 IP 地址,如果发现同一个 IP 地址的客户端频繁地请求数据, 该网站就会判断该客户端是爬虫程序. 针对这种情况,我们可以让 Sc