Python实现JS逆向解密采集网站数据

嗨喽,大家好呀~这里是爱看美女的茜茜呐

环境使用:

  • Python 3.10

  • Pycharm

  • nodejs

模块使用:

  • import requests --> pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/

  • import execjs --> pip install pyexecjs -i https://pypi.tuna.tsinghua.edu.cn/simple/

  • import csv


👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可


爬虫实现基本流程:

一. 数据来源分析
  1. 明确需求: 明确采集的网站以及数据

  2. 抓包分析: 分析数据对应的位置

    • 打开开发者工具
    • 刷新网页
    • 通过关键字去搜索找到对应数据位置

    请求网址: https://www.xiniudata.com/api/search3/company/search_company_for_lib

    请求方法: post

    请求参数: payload / sig

    2023- LBcwWVcRKDslJCpgAh4IZRA3WUZJPSZTOSsNPzMiWyA5fCBLEnQdaxVteyFXNyUmQDVCUWYiJl07JzwuMwxWPHUPH2UcbCU1OjE2MFkxMBZRPUJNcDYnEHcVD2F0Jl09J1o2WUQrGT4hMi0wUSYhAFYnFA5iD3gQLiEgPTk3UzsyaiFLRC8kNiEyMQZZMTAWQSBXRk1wbgN7eWB4ZncGf2cFdAgcbCU1OjE2MFkxMBZXJ0JVWz49QSUKMzkzGlchMxd
    2022- LBcwWVcRKDslJCpgAh4IZRA3WUZJPSZTOSsNPzMiWyA5fCBLEnQdaxVteyFXNyUmQDVCUWYiJl07JzwuMwxWPHUPH2UcbCU1OjE2MFkxMBZRPUJNcDYnEHcVD2F0Jl09J1o2WUQrGT4hMi0wUSYhAFYnFA5iD3gQLiEgPTk3UzsyaiFLRC8kNiEyMQZZMTAWQSBXRk1wbgN7emJ0YHMGf2cFdAgcbCU1OjE2MFkxMBZXJ0JVWz49QSUKMzkzGlchMxd
    2023- 5EACCB9741DD3A605198550CEAB12C75
    2022- E7CE2AC7CAE990A036B44ED29F4C0FC9
    

    分析 payload / sig 如何生成的

    1. 点击启动器 / 关键字搜索, xhr 先断点查看代码

    2. 进入JS代码 进行断点调试

    3. 找到对应的加密 -> 扣代码

二. 代码实现步骤
  1. 发送请求

  2. 获取数据

  3. 解析数据

  4. 保存数据

代码展示

导入模块

'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 否则可能不通过)
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
# 导入编译JS代码模块
import execjs
# 导入数据请求模块
import requests
# 导入json模块
import json
# 导入时间处理模块
import datetime

“”"

  1. 发送请求: 模拟浏览器对于url地址发送请求

“”"

# 模拟浏览器
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 请求网址
url = 'https://www.xiniudata.com/api/search3/company/search_company_for_lib'

“”"

通过python代码去调用js代码

“”"

'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 否则可能不通过)
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
# 请求参数
l = {
    "tag_names": [],
    "corporate_regionIds": [
        1
    ],
    "corporate_provinceIds": [],
    "corporate_cityIds": [],
    "corporate_districtIds": [],
    "corporate_establishDate_start": 1672502400000,
    "corporate_establishDate_end": 1703952000000,
    "funding_fundingDate_start": "null",
    "funding_fundingDate_end": "null",
    "corporate_locationIds": [],
    "corporate_rounds": [],
    "operator": "and",
    "notFromGongshang": "true",
    "sort": 76006,
    "order": -1,
    "start": 0,
    "limit": 20
}
# 读取js代码
f = open('data.js', encoding='utf-8').read()
# 编译js代码
js_code = execjs.compile(f)
# 调用js代码函数
res = js_code.call('get_data', l)
# 构建请求参数
data = {
    'payload': res['payload'],
    'sig': res['sig'],
    'v': 1,
}
# 发送请求
response = requests.post(url=url, json=data, headers=headers)
# 2. 获取响应数据
json_data = response.json()
# 3. 解析数据
d = json_data['d'] # 密文数据
# 调用js代码 获取响应数据 明文数据
d_res = js_code.call('get_response', d)
# 转成json字典数据
d_json = json.loads(d_res)
# 列表推导式 获取 company_code 列表
codes = [i['company_code'] for i in d_json['data']]
code_dit = {"codes": codes}

“”"

获取第二个链接请求参数密文

“”"

'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 否则可能不通过)
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
res_two = js_code.call('get_data', code_dit)
# 构建请求参数
data_two = {
    'payload': res_two['payload'],
    'sig': res_two['sig'],
    'v': 1,
}
# 请求网址
link = 'https://www.xiniudata.com/api2/service/x_service/person_company4_list/list_companies4_list_by_codes'
# 发送请求
response = requests.post(url=link, json=data_two, headers=headers).json()['d']
info_list = js_code.call('get_response', response)
info_json = json.loads(info_list)
for index in info_json['list'][1:]:
    establishDate = int(str(index['establishDate'])[:-3]) # 建立时间戳
    # 转成日期
    time_1 = str(datetime.datetime.fromtimestamp(establishDate))
    fundingDate = int(str(index['funding']['fundingDate'])[:-3]) # 融资时间戳
    time_2 = str(datetime.datetime.fromtimestamp(fundingDate))
    dit = {
        '公司': index['name'],
        '领域': index['brief'],
        '行业领域': index['tagNameList'],
        '国家': index['regionName'],
        '省份': index['provinceName'],
        '城市': index['locationName'],
        '成立日期': time_1,
        '融资日期': time_2,
        '当前轮次': index['funding']['roundName'],
        '融资金额': json.loads(index['funding']['fundingDesc'])['money'],

    }
    # pprint.pprint(json.loads(index['funding']['fundingDesc'])['investorStr'])
    print(dit)

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值