今目标爬取策略
破解过程
破解今目标有几个方面要注意的:
- 要用模拟登陆的方式才可以进去今目标的网站从而获取想要的数据
- 在破解的时候,遇到反扒策略,登陆密码用到了sha加密算法
- 破解登陆之后我们要怎么获取相应的内容
首先我们打开今目标的官网
我们只能登录过后才能获取到我们想要的数据,这就涉及到模拟登陆的问题了
我们还是按照老规矩一步步来分析先,先点击登录按钮,然后打开f12,去抓包看看,模拟登陆的样子
打开之后首先是这样的,然后打开我们的f12,记得把这个也勾选上,不然有时候可能有一些包获取不了
然后我们再去进行一下模拟登陆,看看抓到的包的内容是什么,这里我们采用一个虚拟号码和虚拟密码用来测试
账号:13060993333
密码:123456
然后我们点击登录
这时候我们就可以抓到对应的包
把这个包拉到最下面就是我们需要进行模拟登陆的post请求参数
红色框框就是我们要进行模拟发送的参数,
username就是我们的账号
password就是我们的密码,熟悉密码学的人都知道,这一串是sha来的
接下来滤清思路就好办了,只要我们把这一串sha加密算法进行一个解密的过程,那么我们的请求参数就破解好了,然后再进行模拟登陆最后就可以获取到我们想要获取到的内容。
对于这种我们有两种方法
- 用js进行逆向解密,相对可能简单一点
- 直接调用python的hashlib库进行解密,如果完全没有js基础的话,还是我还是推荐第二种的,毕竟第二种是会用python的库就好了,也看的懂,不像第一种就算会逆向解密的方法,也看不懂为什么要这样解密
好了,废话不多说直接上代码,其实代码就一行就搞定了
因为是摸清了它采用的是sha加密的,所以首先我们先导入hashlib库,然后直接调用hashlib库来进行暴力破解就好了,因为库别人都帮我们封装好了,所以知道怎么使用就好了
先调用hashlib中的sha1库,然后对传入的参数进行编码最后求出来的参数和我们刚刚看见的加密参数是一模一样的,也就是证明我们破解正确了
在破解好我们的参数之后
我们用session方法来包含我们需要进行模拟登陆的页面,session就是用来存放cookie的一个容器,请求成功之后就会返回我们熟悉的一堆html源码了
下面就是源代码了
import hashlib
import requests
def login():
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}
session = requests.session()
session.headers = headers
url='https://sso.jingoal.com/oauth/authorize?client_id=jmbmgtweb&response_type=code&state=%7Baccess_count%3A1%7D&locale=zh_CN&redirect_uri=https%3A%2F%2Fweb.jingoal.com%2F'
data={
'login_type': 'default',
'username': 13060993333,
'password': hashlib.sha1('123456'.encode()).hexdigest()
}
html = session.post(url,data=data,headers=headers)
if html.status_code == 200:
get_html(session)
else:
print(html.status_code)
def get_html(sess):
response = sess.get('https://web.jingoal.com/#/workbench?_k=6y48ik')
content = response.text
print(content)
if __name__ == '__main__':
login()
小结
其实对于爬虫工程师来说,解密都是家常便饭,比较只要是一个常见的网站都会多多少少涉及到一些加密的算法,而我们想要获取到数据就必须要对其进行解密,所以我们常说算法是每个程序员必备的技能之一,因为你写后端对你的内容进行加密需要用到算法,而你写爬虫的时候也需要算法去破解别人的加密内容,你要是从事数据分析或者数据挖掘更多的就是考验我们对算法的灵活运用,哪怕你去面试工作很多时候都是考验你的算法能力,所以有空还是得去多了解算法才行。
备的技能之一,因为你写后端对你的内容进行加密需要用到算法,而你写爬虫的时候也需要算法去破解别人的加密内容,你要是从事数据分析或者数据挖掘更多的就是考验我们对算法的灵活运用,哪怕你去面试工作很多时候都是考验你的算法能力,所以有空还是得去多了解算法才行。