美文网首页大数据 爬虫Python AI SqlPython小哥哥
实例解析|Python加解密VIP网站反爬请求头实现数据爬取!

实例解析|Python加解密VIP网站反爬请求头实现数据爬取!

作者: 14e61d025165 | 来源:发表于2019-03-29 14:31 被阅读1次

    正常情况下,对于需要登录的网站,一般只要将登录后的cookie携带到headers中就可以实现认证后的访问请求。但是,也有例外。

    最近,州的先生(zmister.com)遇到了一个网站,就是那样的例外。

    文章目录

    请求受阻

    通过页面调试,找到了其数据接口,如下图所示:

    image image.gif

    数据在接口的响应中一览无遗,于是按照常例,我们马上构造一个与网页请求一样的headers:

    [图片上传失败...(image-7f4350-1553841035135)]

    image.gif

    然后使用requests对接口url进行请求:

    <pre>response = requests.get(url, headers=headers, timeout=5)
    print(response.text)

    </pre>

    本以为会顺顺利利地看到接口数据被打印出来,没想到返回的却是一个401的响应,内容为:

    <pre>Illegal access

    </pre>

    image image.gif

    显然,它提示我们未授权访问。但是我们明明已经将登陆后的Cookie放到了headers中。如果cookie没问题,那么就要分析其他的地方了。

    分析JS

    排查一番,发现请求参数是没问题的,header里面的compassS是一个会变化的值,问题应该就出在这里。

    为了验证这个猜想,我们在调试控制台中搜索包含compassS的文件资源,搜出来一个js文件:

    image image.gif

    将其复制出来进行格式化,继续搜索compassS字符串,发现了这个header的来源函数:

    image image.gif

    compassS的值为变量u,其结构为下所示:

    <pre>'1553669366913_95857b7e16509a775b3e62b8e5fd0944',

    </pre>

    可以看到变量u是由以下两个个部分组成:

    • 当前时间的时间戳;
    • 查询字符串、固定字符串和当前时间时间戳的MD5加密字符串的切片;

    构造加密字符串

    了解了这些,我们就可以来构造headers里面的compassS键了,代码如下所示:

    <pre>timer = int(round(time.time() * 1000))
    m = hashlib.md5()
    s = 'getDetailsComPASs#123&WEb{}'.format(timer)
    m.update(bytes(s,encoding='utf-8'))
    l = m.hexdigest()
    ll = l[6:len(l)] + l[0:6]
    Python学习群:683380553,有大牛答疑,有资源共享!是一个非常不错的交流基地!欢迎喜欢Python的小伙伴!
    </pre>

    其中,timer是前半部分的时间戳,ll是后半部分的MD5加密字符串,我们将其拼接起来:

    <pre>'compassS': '{0}_{1}'.format(timer,ll),

    </pre>

    再次进行请求,可以发现,请求已经成功返回了正确地数据,如下图所示:

    image image.gif

    这样,我们就通过对加密请求头进行解密解决了接口请求限制的问题。

    相关文章

      网友评论

        本文标题:实例解析|Python加解密VIP网站反爬请求头实现数据爬取!

        本文链接:https://www.haomeiwen.com/subject/stplbqtx.html