python爬虫入门 ✦ unescape解析

记录一下这个简单的解决js加密的方法。

最近在看一个网站的时候,发现有一个很有意思的加密,如果想从源码直接获取到它的文本,呵呵,没门!! ,不会最基本的javaScript,呵呵,没门!!。网站加密手段很简单,但是刚开始看时候却找不着方法,记录一下。

1.问题展示

1.看一下下图,这是网页的亚子。(手动复制过来的,只上了文本)
在这里插入图片描述
2.查看一下源码
在这里插入图片描述
3.没错,这一堆东西进行了加密,看起来还不简单的样子。接下来看一下如何解决它。
4.网页源码。(可手动复制保存为html格式)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>
<script type="text/javascript">
var sentence= "~5982~679c~4f60~5df2~7ecf~9519~8fc7~4e86~5341~5e74~524d~79cd~6811~7684~65f6~673a~ff0c~4e0d~8981~61ca~6094~ff0c~73b0~5728~64ad~79cd~ff0c~603b~6709~4e00~5929~ff0c~5b83~4e5f~4f1a~4ead~4ead~5982~76d6~3002~002d~002d~3010~0073~0075~006e~0072~0069~0073~0065~0063~0061~0069~5171~52c9~3011\n"
var sentence_=unescape(sentence.replace(/~/g,'%u'));
document.write(sentence_)
</script>

2.解析

  • 首先看到源码内的var sentence定义了一串很长的字符串,看一下有什么规律。
var sentence = ~5982~679c~4f60~5df2~7ecf~9519~8fc7~4e86~5341~5e74~524d~79cd~6811~7684~65f6~673a~ff0c~4e0d~8981~61ca~6094~ff0c~73b0~5728~64ad~79cd~ff0c~603b~6709~4e00~5929~ff0c~5b83~4e5f~4f1a~4ead~4ead~5982~76d6~3002~002d~002d~3010~0073~0075~006e~0072~0069~0073~0065~0063~0061~0069~5171~52c9~3011
  • 发现是一个 ~ + 4位字母或数字组成的字符串,,
  • 再看下面一句,sentence_sentence 先经过 replace字符替换然后经过 unescape 解密的变量。
var sentence_=unescape(sentence.replace(/~/g,'%u'));

在js里面,/~/ 等价于 ‘~’g代表全局,%u等价于 \u
换句话说就是:replace(/~/g,’%u’) 的意思就是将字符串的所有的 ~ ,替换成 \u.

  • 所以,进行字符替换后,就可以拿到替换后的数据了。
    在这里插入图片描述
    取到字符替换后的字符串后,去解码网站,选择Unicode转中文,看一下是否是我们需要用数据。
    在这里插入图片描述
  • 很明显,这是我们需要的数据。接下来看一下用python如何实现解码。
# 先将字符串编码为'utf-8',然后解码为'unicode_escape'
string = string.encode('utf-8').decode('unicode_escape')
  • 添加了这一行代码,就大功告成了。
    在这里插入图片描述

3.完整代码

string = '~5982~679c~4f60~5df2~7ecf~9519~8fc7~4e86~5341~5e74~524d~79cd~6811~7684~65f6~673a~ff0c~4e0d' \
         '~8981~61ca~6094~ff0c~73b0~5728~64ad~79cd~ff0c~603b~6709~4e00~5929~ff0c~5b83~4e5f~4f1a~4ead~4ead' \
         '~5982~76d6~3002~002d~002d~3010~0073~0075~006e~0072~0069~0073~0065~0063~0061~0069~5171~52c9~3011'
string = string.replace(r'~',r'\u')
string = string.encode('utf-8').decode('unicode_escape')
print(string)

不由感慨编程语言的神奇之处。
好了,本次的分享到此结束。
有任何疑问欢迎在下方留言哦。

发布了34 篇原创文章 · 获赞 210 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_45081575/article/details/102713747
今日推荐