网页抓取 加密html(【魔兽世界】反爬与反反爬突破网站的一些经验)
优采云 发布时间: 2021-09-14 03:02网页抓取 加密html(【魔兽世界】反爬与反反爬突破网站的一些经验)
防爬和防爬一直是相互博弈的游戏。路高一尺,魔道高一尺。知己知彼,百战不殆。想要突破网站的反爬机制,必须对当前的前端开发技术有深刻的了解,才能在这款游戏中生存。
我是爬行动物爱好者。最近在爬小说网站时,通过抓包分析,发现小说正文被加密,如图:
获取小说文本的响应数据
小说文本加密数据
根据字面意思可以看出,小说的文本是经过编码存储在Content key中的,但是这个字符编码无法显示和解码,所以确定它已经被加密了。这时候我们就来看看网页js代码分析和编码转换过程。但是一个网页有很多js代码,而且还经过编译、混淆和压缩,所以直接阅读整篇文章会很费力。因此,我们必须掌握一定的技巧,才能更有效地解决问题。
接下来分享一些我查看js代码的心得。
首先看请求地址,可以发现“index.php/Bookreader”是url的固定部分,
然后,我们按快捷键Ctrl+Shift+F进行搜索,结果如下
点击此结果定位位置
如您所见,此接口路径已分配给变量 getChapterContentAjaxUrl。接下来,搜索这个变量,看看它在哪里被调用。
根据经验,点击底部打开js代码页
看到这个代码逻辑,相信你已经明白了。本次POST请求成功后,返回json数据,然后对json的Content字段进行解码。在第754行,有一个函数“_decryptByBaseCode”来实现解码功能。函数,OK,看函数的具体实现。
在这个地方设置一个断点,在断点之后
点击F9一步步执行,跟踪进去
函数_decryptByBaseCode的实现代码
如你所见,这个解码逻辑很简单,将文本用反斜杠分割成数据,然后一一解码。
有两个函数 String.fromCharCode 和 parseInt。第一个是将int转换为unicode字符,第二个是根据指定的基数将字符串转换为int。这里他们使用 30 base 来编码 Encrypted。
所以这个功能可以用python实现。实现代码如下,
# 解码
def decrypt_by_basecode(text,base):
if not text:
return
# base=30
arrStr = []
arrText = text.split('\\')
for i in arrText:
if i:
s = chr(int(i,base))
arrStr.append(s)
objStr = ''.join(arrStr)
return objStr
写好解码函数后,我们可以在程序中调用这个接口,然后对小说内容进行解码。
通过上面的实战演示,你可以看到一个优秀的爬虫工程师,也是一个资深的前端工程师。
欢迎关注我的知乎account
@arckal 太阳
我会不定期分享一些技术经验。 ^_^