python爬虫JS逆向之人口流动态势大数据

今天学习JS解密的网站是:人口流动态势大数据,这是网址:https://unicom_trip.133.cn/city/?system=cjfcts。

在做JS解密的时候,我们一定要记住一个方法:缺什么补什么。这个必须牢记在心中,将会在后面的学习中体现出来。

废话不多说,我们正式开始。

  1. 进入网站后,F12抓包。(注:需要选择比较前的时间,因为最新的数据还没有出来)
    在这里插入图片描述

从这个异步加载我们得到了数据:但是却不是我们想要的数据,这时候就要开始解密了。
我们先看一下加密数据:eyJpdiI6IjVCWDR6TE42NjlJVVZaSmdVT0RFRlE9PSIsInZhbHVlIjoiMVNkREJFb01BUVZ6blNnS0dvd1wvVDkzTERINzNLd3dHdFwvVEs5ZTdrZUwyY1NHSDdFNWc4Y1NMdG5jVE5vWlRNMUhcL3hSU2pSdFFBN1d4U09YTWplRUlMUHlPUDFYdHhHZjVlbGRPWU1Lemx0cWZHa0dZZGlzZytzcWE3NExGT2xaK0x3R1pnb0ZSd1VONnhIV2xCelwvOGtkSFRTWmNraVhnb0pqbG0zTmUrK1E5MFdWXC9qVWdUbTUwY21HUCtGN0dqV29DOHppQzZ2dkhhYXN6TVN6OGE5QUdObFYwR3ZRczYrblY1a0hcLzZyNGFtOFwvUVo5Wnk3Z1NWbGRheHR5TnVTU1E1dVJDc1FiQ2NCM1p0Z2dxQ29TRVlKcTRXcFd0aHR3WmhLeDBhTUZZZUI3UVQrbkJWRlRyRDJHNmlLc240VEFXbVMrZ3FDck11Q3BNTkF1SVdUVys2UU90TlJWczVDZHR5V25Xd3JPVVlhTWFNMVNPWDA2WWFGM3psdSsyTzVGRXFtMTNQUnhsdUw5OFpMNU1NbmlzSlFxcTk1UEFNOWJtVzQyQVpEWkRLOXllSUR1UUphcE9VclwvTW1yYlFvSlpEaFJhVWllRFUybkpHYWJPa0M0SXRDSTZmSmZCQTluMllvdFhYT1paTllIbFNDbzZsWnVLazVDQms1MWQ5NGdBSWxVd01HRnRGZUtleUNqOFZkSDlxajlcL0plZjA5OWNRbzVvYjBhSVZlTGhISlpTaERzbWNkZmhidXBMUmJiSWh0Q2w1QVwvV0Vwa3A2ZG11WUxJNmM3aHRRNlhpbVIrZGtHK1MzOGxuQ3RYSmtmYVgrdnRadjdTc0hTMFB2bjNpSDBSM21GMU1udHZXaDBrdCsxXC9HVzBQTGFTQ0FuV2IxbUFnRDgyT1puRTNDOUlKSEY0TGlOc0p4YURrQnpTWjAxTnpqRkhDOVYyWndsSE4zeXpQblpiRmNSZFkxRFhmMnVjSXArdklzMU1TVUp4NjdsRTBEWVc0YzYrSlZvWVwvMmpqODFwNkVnWjkzWW1YTXZ6VHFEOVZvb2xmN2JNWlM2K2lHaUF0aHJYclhuVjRcL1pVd1wvVmtXQWNaN1ZBMlZycnhZRGVLOUR5aEJzbjhuZ0hodkpkcG1aR3QrWHg5UlZTT3VjcjdrWXZcL1EyUEE4Rm9WcXVNMk9IdzR3bnVZUkdYRW1EZmErS3owblRuQzF1TXJJMFR0OGdsMVlaY3pvdlhSdVpDQ0dkemEzM05oZlRtb3hITHVZS0FzRWF3U1RuSmhHOFNadnQ0SzhFRXdcL3U5cWZPSE1nUkUxd0UrbFBpQVhFeXBhM2lUXC9kT1FcL3I2R2dJVXYxMVJrV1pmZUJVWkNpSHhPT2VuXC9Ud1pZWHcza0FvV1VvenBPamRHTWJDN0xtT1VmMmFjUVBwNFVUVjhIaHZLZFFKaWMxT0d5NkNzbU1LSUJ5eTV6aWkwYUozSHR1dkFwRkVkK2I1anc3TVEzTm9sVTZVcDYyK1huMStZZGRTOFdJcFVJd3Z3S21FNWlhSGFPSDVpcUdaVFwvdHIzVDVQeXgya2UyR0k2djBkNVlvdmFTUjJKVUVsWWNrUDQ5VmJ2S3ZkblZodzl0SG1ZNUFiK3FHdU1pNE9IcU1VVVZ2TmF4Y3JQaFRUR1dTeFlZUXFxUTFtVTBTZ3J3ZmhHQ1BaUzRoSVVKNmpiRnQxQm1xYzk0MFwvdkFqekU5WHBHYWErYjdvZ05jZ0Q0OXFNYThrVVBRMnlXdzd5S1VsRW83aGxWTklTbUl1aEJyQ2k0N0Q5akJ4RWhmV1hTM3lcLzZHWXFSNndVeHBRVjZONndEcGM2Skl5RUd6eG93XC9XaUNVXC8xeEVvRWk2bHFSWnZqYmtTc2R2UWUySGJteDJVZFJ5YWJpbEE9PSIsIm1hYyI6IjM5OTI5MjUyNDkwMjJhODUyYmE3Yzg0OGUxNWUyODRiNmQzMTBlZDRjNzljODQzYzJmMDVlNTNiZjI1NjBjZWYifQ==

是不是看不懂了?这儿我就直接说了,如果在以后的数据中看到加密数据后面有“==”的,有可能是base64加密。我们去base64解密网站解密一下这个数据。
在这里插入图片描述
出现数据了吧,可以看到是一个json类型的加密数据,我们先格式化一下解密后的数据:
在这里插入图片描述
知道是base64加密以后,我们就来找base64加密方法。因为解密后的数据是json类型的数据,所以我们来找一个关键词,叫:json.parse
在这里插入图片描述
看到这些是不是感觉跟我们想要的数据很像了是吧。我们进去js文件后,继续搜索json.parse,会发现这个函数,而且这个函数里又正好出现了base64。
在这里插入图片描述
经典操作:打断点。
在这里插入图片描述
可以看到 这儿的这个dataDdecode(data)就是js中加密的函数么我们把这个函数拿出来
在这里插入图片描述
这个dataDecode函数是有一个参数的,我们从前面抓包的图中就可以看出,其实这个传入的参数data就是我们在文章开头拿到的加密数据。我们先搭一个基本的框架来运行一下这段js代码,看看能不能出来结果:(execjs库在上一篇文章中已经讲过了,这儿就不再赘述)
在这里插入图片描述
这是基本的框架,我们来运行一下:

发现报错了:execjs._exceptions.ProgramError: ReferenceError: Base64 is not defined,这儿就要想起我开头给你们说的最关键的一点:缺什么补什么。
我们的js代码中存在base64,但是却没有定义,所以我们需要再次回到原来的js文件中找到这段定义base64函数的代码:

在这里插入图片描述
将这段function Base64()代码复制到我们的js文件中,再次运行:在这里插入图片描述
发现又报错,说CryptoJS is not defined,那就再找到定义CryptoJS的代码,再添加进来。(这儿插入一点,如果加入了Base64这段代码,并没有出现CryptoJS未定义,而是出现这段报错:execjs._exceptions.ProgramError: TypeError: ‘JSON‘ 未定义,这儿就需要安装一个叫nodejs的程序,教程已经发了,传送门:"JSON"未定义解决办法,装好nodejs后这个报错就会解决)

现在我们去找定义CryptoJS的代码:
在这里插入图片描述
这儿定义CryptoJS的代码的代码非常长,大家在复制代码的时候一定要注意代码的完整性,不然是不会出结果的。
在这里插入图片描述
在这里插入图片描述
把这段代码加进去以后,我们再来运行:
在这里插入图片描述

哎,有数据了对吧,但是还是看不太清楚,我们来看看网页给我们显示出来的数据:

在这里插入图片描述
跟上面的数据一对比,是不是发现后面的百分比数据是一样的,但是前面的城市名是用固定的代码替换的,我们再去js文件中找找城市的代码是如何替换的:继续打断点
在这里插入图片描述
我们在控制台打印一下这部分数据:console.log(cityList):
在这里插入图片描述
因为这个编号都是固定不变的,所以我们可以直接复制到我们的py文件中就行了。因为现在数据我们已经拿到了,现在就是对拿到的数据进行格式化输出。

拿到的两个数据都是字典类型的,遍历替换就行。这些都是基础,就不说了。

    for sourcecity in get_html_data:
        for citycode in city_list:
            if sourcecity["source_city"] == citycode["city_code"]:
                sourcecity["source_city"] = citycode["city_name"]
        print(sourcecity)

最终得到的结果是这样的:
在这里插入图片描述
这样我们就解析出来了加密的数据。

今天整个js解密的过程,都用到了我前面让大家记住的一句话:缺什么补什么。在今后的解密过程中,这也是很常用到的。

今天的分享就到这里啦,如果有看官需要源代码的可以关注微信公众号:【PyDream】,回复:人口流动。

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔡霸霸i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值