潇洒的吸血鬼 发表于 2021-8-6 09:56

记一次爬取数据过程

本帖最后由 潇洒的吸血鬼 于 2021-8-6 10:44 编辑




# 记一次爬取数据过程

### 目标网站

某磁力连接网站

### 目标

获取如图信息



### 遇到问题

1. 数据是js加载的

2. 数据是加密(?)的



那么目标就变成从接口获取数据然后进行解密操作了

### 解密数据

#### 格式化代码

关键JS文件是压缩过的,无法进行调试。需要格式化后才可以进行调试

首先找到关键JS文件



点击代码左下角进行格式化

格式化后会生成一个新的JS文件,这个时候刷新页面,在新的JS里面打的断点就会起作用

#### 开始调试

首先查找接口看是否可以获取线索



显然,基本没有什么多余的信息可以获取

那么换一种思路,从接口获取数据到渲染页面一定会有从接口返回数据中读取列表信息的过程



经过查看接口返回值,发现列表信息对应的Key为**hits**

所以搜索hits(注意搜索时选择不忽略大小写)



如图所示,从请求接口返回值中获取列表数据

只需要关注这一句

```JavaScript
l.adapter.data.pushAll(a)
```

接下来搜索adapter.data



一共7个结果,经过查看除了调用clear()就是调用length。只有这里最可疑

接下来走了一些弯路,我先后去搜索了wt,We,Ue这几个函数,发现这些方法实现的逻辑是构造虚拟dom。渲染页面。没有我关注的解密数据过程

直到我发现这一行代码



原来如此,解密方法写在String的原型中,最后搜索到解密方法如下

```JavaScript
String.prototype.decrypt = function() {
    var e = this.valueOf();
    if (0 < this.length) {
      for (var t = [], n = 0; n < e.length; n++)
            t = 202033 ^ e.charCodeAt(n);
      e = String.fromCharCode.apply(null, t)
    }
    return e
}
```

python版本

```Python
if __name__ == '__main__':
    s = "誨曑嬲誨曑䑙菷"
    t = ''
    for c in s:
      t += chr((202033 ^ ord(c)) % 65536)
    print(t)

# 输出结果
# 龙珠(七龙珠)全集
```

### 结语

虽然如此,最后分析的结果并没有用上
[成品开源项目](https://github.com/ggymm/magnet)

syy 发表于 2021-8-6 16:02

出现异常, HTTPSConnectionPool(host='4raq0y70.xyz', port=443): Max retries exceeded with url: /search-%E9%BE%99%E7%8F%A0-0-0-1.html (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000178EF6B7E50>: Failed to establish a new connection: 由于目标计算机积极拒绝,无法连接。'))) 大佬 我下载GitHub上的 用pycharm装完模块之后 磁力搜索显示加载错位u 这是什么原因呀{:1_904:}

derain 发表于 2021-8-6 11:33

String.prototype.decrypt = function() {
    var e = this.valueOf();
    if (0 < this.length) {
      for (var t = [], n = 0; n < e.length; n++)
            t = 202033 ^ e.charCodeAt(n);
      e = String.fromCharCode.apply(null, t)
    }
    return e
}



这是什么奇怪的加密方式... {:1_908:}

pwp 发表于 2021-8-6 11:08

python就这点代码就完啦?

sphsyv 发表于 2021-8-6 11:21

爬取数据,还是用Fiddler好用

潇洒的吸血鬼 发表于 2021-8-6 11:31

pwp 发表于 2021-8-6 11:08
python就这点代码就完啦?

本来解密逻辑就很简单

潇洒的吸血鬼 发表于 2021-8-6 11:32

sphsyv 发表于 2021-8-6 11:21
爬取数据,还是用Fiddler好用

不冲突,js调试chrome的dev tools是真的好用

qiaopf888 发表于 2021-8-6 11:37

pwp 发表于 2021-8-6 11:08
python就这点代码就完啦?

哈哈,虽然他代码少,但是逻辑可以学习借鉴,尤其对我这种小白。

panyanjun 发表于 2021-8-6 11:44

感觉好厉害,学习一下

潇洒的吸血鬼 发表于 2021-8-6 11:54

derain 发表于 2021-8-6 11:33
String.prototype.decrypt = function() {
    var e = this.valueOf();
...

就是字符串的unicode编码被处理过,这里就是按照规则处理回来然后再将unicode转成字符串

wwaaffll 发表于 2021-8-6 11:55

学到了,感谢记录
页: [1] 2 3 4 5 6
查看完整版本: 记一次爬取数据过程