python爬虫之JS逆向.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
Python 爬虫之 JS 逆向 Python 爬虫之 JS 逆向是指在爬虫过程中遇到 JavaScript 逆向的问题。JS 逆向有两种思路:一种是整理出 js 文件在 Python 中直接使用 execjs 调用 js 文件,另一种是根据 JS 中的逻辑,使用 Python 重写相应的方法。本文将介绍第二种使用 Python 重写 JS 的方法。 需求:爬取某区块链网站的数据,遇到的问题是目标网站的数据是通过 AJAX 请求相应的接口获取数据,在请求头中需要携带 x-apiKey(根据时间动态生成的),我们需要解决的就是整理出动态生成 x-apiKey 的方法。 解决思路:根据关键字”x-apiKey”在网站的 JS 中找到相应的定义,然后使用 Python 重写方法,在请求接口时实时生成相应的 x-apiKey。 第一步:在浏览器中使用开发者工具找到相应的接口,请求地址为 https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1654916647499&limit=20&offset=0,请求类型为 GET,请求头为 x-apiKey。 第二步:找到 x-apiKey 的定义方法,t.headers.common[“x-apiKey”] = n.Z.getApiKey(),根据上面的代码中看到 x-apiKey 是由 getApiKey 这个方法返回的,通过 getApiKey 搜索找到相应的定义。 getApiKey 方法的定义如下: ``` { key: “getApiKey”, value: function() { var t = (new Date).getTime() , e = this.encryptApiKey(); return t = this.encryptTime(t), this.comb(e, t) } } ``` 该方法主要进行以下几个步骤: 1. 变量 t 就是获取当前时间戳 2. 变量 e 是调用 encryptApiKey 这个方法 3. 变量 t 是 encryptTime(t)这个方法处理后的返回 4. 最后通过 comb(e,t)个方法生成最终的 apiKey encryptApiKey 方法的定义如下: ``` { key: “encryptApiKey”, value: function() { var t = this.API_KEY , e = t.split(““) , r = e.splice(0, 8); return e.concat(r).join(““) } } ``` 该方法主要进行以下几个步骤: 1. 变量 t 是一个常量字符串 API_KEY,往上找到初 始 值 为 this.API_KEY = “a2c903cc-b31e-4547-9299-b6d07b7631ab” 2. 变量 e 是将上面的 t 分隔成数组 3. 变量 r:从变量 e 中删除前 8 个字符串,并将 e 的前 8 个元素组成的数组赋值给 r。同时变量 e 删除了前 8 个元素 4. 最终将 e 和 r 合并在一起并转为字符串 encryptTime 方法的定义如下: ``` { key: “encryptTime”, value: function(t) { var e = (1 * t + 1111111111111).toString() ... } } ``` 该方法主要进行时间戳的加密处理。 因此,通过分析 JS 中的逻辑,我们可以使用 Python 重写 getApiKey 方法,实现动态生成 x-apiKey。
- 粉丝: 1
- 资源: 2834
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助