• Python爬虫抓取经过JS加密的API数据的实现步骤


    00969-4113027463-_modelshoot style,a girl on the computer, (extremely detailed CG unity 8k wallpaper), full shot body photo of the most beautiful.png
    随着互联网的快速发展,越来越多的网站和应用程序提供了API接口,方便开发者获取数据。然而,为了保护数据的安全性和防止漏洞,一些API接口采用了JS加密技术这种加密技术使得数据在传输过程中更加安全,但也给爬虫开发带来了一定的难度。。
    在面对经过JS加密的API数据时,我们需要分析加密算法和参数,以便我们在爬虫中模拟加密过程,获取解密后的数据。为了实现这一目标,可以使用Python的相关库和工具,如requests、execjs等。
    原因分析及解决方案:

    1. 原因分析:JS加密算法是一种常见的数据保护方式,它可以有效地阻止未经授权的访问者获取数据。通过在API接口中使用JS加密算法,可以方确保只有经过授权的用户才能提供数据然而,这也给我们的数据挖掘工作带来了一定的难题。
    2. 解决方案:虽然JS加密算法增加了数据抓取的难度,但我们仍然可以通过一些方法来解决这个问题。以下是一种常见的解决方案:

    A。分析JS加密算法:首先,我们需要分析JS加密算法的实现细节。通过查看网页源码或使用开发者工具,我们可以找到本本加密算法的相关代码。

    import requests
    from bs4 import BeautifulSoup
    
    # 发起请求获取网页源码
    url = "https://example.com"
    response = requests.get(url)
    html = response.text
    
    # 使用BeautifulSoup解析网页源码
    soup = BeautifulSoup(html, "html.parser")
    
    # 查找JS加密算法的相关代码
    js_code = ""
    script_tags = soup.find_all("script")
    for script_tag in script_tags:
        if "加密算法" in script_tag.text:
            js_code = script_tag.text
            break
    
    # 打印JS加密算法的代码
    print(js_code)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    B.使用第三方库JS模拟环境,当我们使用第三方库来模拟JS环境,并执行JS脚本来获取解密后的数据时,可以使用PyExecJS库来实现。以下是一个示例展示,如何使用PyExecJS库来执行JS脚本并获取解密后的数据数据

    import execjs
    import requests
    
    # 亿牛云爬虫代理参数设置
    proxyHost = "u6205.5.tp.16yun.cn"
    proxyPort = "5445"
    proxyUser = "16QMSOML"
    proxyPass = "280651"
    
    # 设置代理
    proxies = {
        "http": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}",
        "https": f"https://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
    }
    
    # 执行JS脚本获取解密后的数据
    def get_decrypted_data():
        with open("encryption.js", "r") as f:
            js_code = f.read()
        ctx = execjs.compile(js_code)
        encrypted_data = ctx.call("decrypt_data")
        response = requests.get(f"https://api.example.com/data?encrypted_data={encrypted_data}", proxies=proxies)
        decrypted_data = response.json()
        return decrypted_data
    
    # 调用函数获取解密后的数据
    decrypted_data = get_decrypted_data()
    print(decrypted_data)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    请注意,PyExecJS库可以根据您的系统环境自动选择合适的JS运行时。您需要确保已安装相应的JS运行时,如Node.js或PhantomJS。
    通过分析 JS 加密算法和在 Python 中实现相同的算法,我们可以成功地抓取经过 JS 加密的 API 数据。以上是一个简单的示例,您可以根据实际情况进行相应的调整和优化。

  • 相关阅读:
    tf.lite
    注解 + spring aop切面+ SpringEl
    SQL Developer不显示左侧数据库连接目录怎么处理
    限制input框只能输入数字和小数点,并且保留小数点后两位
    软件工程和计算机科学与技术学习方向区别
    「组合数学」隔离区
    Redis主从复制-Redis学习
    【学习记录】从0开始的Linux学习之旅——编译linux内核
    AWS认证SAA-C03每日一题
    【漏洞复现-webmin-命令执行】vulfocus/webmin-cve_2019_15107
  • 原文地址:https://blog.csdn.net/Z_suger7/article/details/132605129