前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫之JS逆向入门篇

Python爬虫之JS逆向入门篇

作者头像
Python编程与实战
发布2019-12-04 16:18:51
2K0
发布2019-12-04 16:18:51
举报

我们都知道现在是大数据时代,用爬虫来获取数据的越来越多,与之对应的就是破解反爬的难度也越来越大

比如现在的网站一般都有各种各样的 JS 加密,app有参数加密或者返回的数据给你加密,甚至加壳! 所以如果不懂 JS 逆向和 app 逆向,这样爬虫很难生存

有幸看到群里有朋友推荐一个 JS 逆向入门的网站,没有经验的朋友可以用来入门练手 有经验的朋友可以用来加深自己的实战经验

网站分析

网站地址:http://www.landchina.com/default.aspx?tabid=226

我们的主要目标是需要获取下面的信息

第一步当然是抓包分析返回的数据,如果你不知道网站是否有 JS 加密

最好的办法是直接用 requests 请求,然后查看响应内容与网站源代码是否相同

响应

上面是用代码请求返回的响应 显而易见 html 中嵌入了 JS,而且很可能做了跳转,因为有个 location 的变量

JS破解

下面是通过 Chrome 浏览器抓包的过程,共请求了三次才获取到最终的数据

其中重定向的链接是在第一次请求返回的响应里面,用 JS 生成的

location

SO, 我们将返回的 JS 扣出来,下面是我提取出来的 JS

代码语言:javascript
复制
function stringToHex(str) {
    var val = "";
    for (var i = 0; i < str.length; i++) {
        if (val == "") val = str.charCodeAt(i).toString(16); else val += str.charCodeAt(i).toString(16);
    }
    return val;
}

function YunSuoAutoJump() {
    var width = screen.width;
    var height = screen.height;
    var screendate = width + "," + height;
    var curlocation = window.location.href;
    if (-1 == curlocation.indexOf("security_verify_")) {
        document.cookie = "srcurl=" + stringToHex(window.location.href) + ";path=/;";
    }
    self.location = "/default.aspx?tabid=226&security_verify_data=" + stringToHex(screendate);
}

提取出来之后,我们可以先看下 JS 里面的内容,然后本地进行调试,当然前提是你电脑上安装了 node.js 可以看到 self.location 就是我们所需要的重定向链接

其中 curlocation 这个参数并没有用到,我们可以将相应的代码注释

还有个 screen 的属性,查询下资料可知是获取用户屏幕信息,我们直接改掉即可!

然后将 location 值返回,下面是改正后我们所需要的 JS

改正后的JS

运行这段 JS,直接生成我们所需的参数!

验证

我们也用代码模拟三次请求 其中第一次和第二次都会生成验证的 cookie

代码如下:

代码语言:javascript
复制
def spider():
    response = session.get(url)

    text = response.text

    ctx = execjs.compile(correct_js)  # 改正后的js
    location = ctx.call("YunSuoAutoJump")

    second_url = "http://www.landchina.com" + location

    _ = session.get(second_url)

    res = session.get(url)

    selector = Selector(text=res)

    result = selector.css("#TAB_contentTable tr")[1:]
    td_list = result.css("td")

其中 correct_js 就是上述改正后的 JS。最后我们看下能否提取出数据,结果一目了然!

验证结果

总结

到这里 JS 加密的破解就结束了,可以看到在流程当中比较重要的地方就是: 1.找数据,知道该网站会对哪些数据和请求头进行验证 2.找规律,寻找这些数据的加密规则 3.调试 JS,使用浏览器或者在本地进行调试 4.模拟数据,将这些数据通过代码模拟生成,然后加入到数据当中

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python编程与实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 网站分析
  • JS破解
  • 验证
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档