网页抓取 加密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 太阳

  我会不定期分享一些技术经验。 ^_^

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线