首页 > 其他分享 >空气质量检测平台js爬虫逆向分析

空气质量检测平台js爬虫逆向分析

时间:2024-12-04 10:33:03浏览次数:6  
标签:cookies 请求 爬虫 js result 空气质量 data

image

空气质量检测平台JS爬虫逆向分析

本文将展示如何使用Python构建一个爬虫,抓取空气质量检测平台的数据,并对其进行逆向分析。

1. 背景介绍

我们需要抓取空气质量检测平台提供的实时空气质量数据。在此过程中,我们遇到了一个常见的问题:请求的数据是经过加密的,需要我们对请求和响应的JS加密逻辑进行逆向分析。

2. 技术栈

  • Python 3.x
  • requests库:用于发送HTTP请求
  • execjs库:用于执行JavaScript代码
  • json库:用于解析JSON数据

3. 代码解析

3.1 请求头和Cookies

在向平台发送请求时,我们首先设置了请求头和Cookies,以模拟浏览器访问。

headers = {
    "Accept": "*/*",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Connection": "keep-alive",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Origin": "https://www.aqistudy.cn",
    "Referer": "https://www.aqistudy.cn/html/city_realtime.php?v=2.3",
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-origin",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest",
    "sec-ch-ua": "\"Not)A;Brand\";v=\"99\", \"Google Chrome\";v=\"127\", \"Chromium\";v=\"127\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\""
}

cookies = {
    "Hm_lvt_6088e7f72f5a363447d4bafe03026db8": "1723736791",
    "HMACCOUNT": "E6CE4DBDB92CCAA2",
    "Hm_lpvt_6088e7f72f5a363447d4bafe03026db8": "1723883137"
}
def read_js():
    with open("./spider.js", "r", encoding="utf-8") as f:
        return f.read()

def get_data(city_name):
    headers = {
        # 上述请求头部分
    }
    cookies = {
        # 上述cookies部分
    }
    url = "https://www.aqistudy.cn/apinew/aqistudyapi.php"
    js_file = read_js()
    obj = {"city": city_name}
    hXhY1B2Kd = execjs.compile(js_file).call("get_param", "GETDATA", obj)
    data = {
        "hXhY1B2Kd": hXhY1B2Kd
    }
    response = requests.post(url, headers=headers, cookies=cookies, data=data)
    print(response.text)
    result = decode_data(response.text)
    result_json = json.loads(result)
    rows_list = result_json['result']['data']['rows']
    for item in rows_list:
        print(item)

def decode_data(data):
    '''
    解密
    :param data:
    :return:
    '''
    js_file = read_js()
    ctx = execjs.compile(js_file)
    return ctx.call("decode_data", data)

if __name__ == '__main__':
    get_data("北京")

完整代码在:https://cainiao-coder.com/

标签:cookies,请求,爬虫,js,result,空气质量,data
From: https://www.cnblogs.com/marsFactory/p/18585779

相关文章

  • DevExtreme JS & ASP.NET Core v24.2新功能预览 - 全新的聊天组件
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程......
  • DevExtreme JS & ASP.NET Core v24.2新功能预览 - 全新的聊天组件
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程序中......
  • 用js怎么实现图片马赛克效果?
    在前端JavaScript中,实现图片马赛克效果主要有两种方法:使用CanvasAPI和使用SVG滤镜。CanvasAPI更为常见和灵活,以下提供使用CanvasAPI实现马赛克效果的代码示例和详细解释:functionmosaic(image,tileSize){constcanvas=document.createElement('canvas');co......
  • css的加载会阻塞js运行吗?为什么?
    CSS的加载会阻塞DOM树的构建,从而间接阻塞依赖DOM结构的JavaScript代码的执行,但不会阻塞其他JavaScript代码的下载和解析。具体来说:浏览器渲染过程:浏览器渲染页面需要构建DOM树(描述HTML结构)和CSSOM树(描述CSS样式),然后合并成渲染树,最终绘制到屏幕上。CSS......
  • 在chrome中js的数组占用了多少内存?
    在Chrome中,JavaScript数组的内存占用取决于几个因素:数组元素的类型:这是影响最大的因素。基本类型(primitives):像数字(number),布尔值(boolean),空值(null),未定义(undefined)等,这些类型的值直接存储在数组中,占用空间相对固定。数字通常占用8字节(64......
  • 使用js生成1-10000的数组
    //Method1:Usingaforloop(mostcommonandgenerallyefficient)functiongenerateArray1(){constarr=[];for(leti=1;i<=10000;i++){arr.push(i);}returnarr;}//Method2:UsingArray.from()andkeys()(moreconcise)funct......
  • 如何禁止百度爬虫抓取网站?
    从前端开发的角度来看,完全阻止百度爬虫或任何搜索引擎爬虫是不可能的。前端代码对所有人可见,包括爬虫,因此任何基于前端的解决方案都可以被绕过。真正的爬虫控制是通过服务器端配置(例如robots.txt和元标签)完成的。然而,前端技术可以与服务器端方法结合使用,以增强对爬虫行为的控......
  • 你是如何排查js内存泄漏的?
    排查JavaScript内存泄漏是一个常见的前端性能优化任务。以下是一些常用的方法和工具:1.使用浏览器开发者工具:Memory标签页:这是ChromeDevTools中最常用的工具。HeapSnapshots:可以捕获JavaScript堆的快照,比较不同时间点的快照,找出哪些对象没有被垃圾回收,从而......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
                   摘 要在网络信息的时代,众多的软件被开发出来,给业主带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,智慧小区管理系统只能以业主为导向,以产品的持续创新作为智慧小区管理系统最重要的竞争手段。系统采用了B/S结构,将......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
    摘要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线考试等问题,对如何通过计算机在线考试进行研究分析,然后开发设计出在线考试系统已解决问......