星星充电 充电桩数据爬虫

简介: 星星充电 充电桩数据爬虫
本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!

某星充电APP 充电桩信息

环境

  • win10
  • 某星充电 APP 7.9.0版本
  • Android8.1

X-Ca-Signature参数分析

APP有防抓包检测,使用算法助手启动可正常抓包,分析数据包后发现关键的就是X-Ca-Timestamp和X-Ca-Signature, Timestamp很明显看出来是时间戳,重点分析一下Signature参数脱壳后搜索关键词:X-Ca-Signature只有一处跟进去分析一下具体的参数构造可以很明显看到是参数加上固定的key拼接后做了md5处理

Signature参数分析

站点详情有一个Signature参数是H5加载js生成的,定位到具体赋值的位置,然后往上跟可以看到是经过一个随机uid+时间戳生成的

   defget_signtrue(self, dic: dict):

       """

       生成signature参数:7.9.0版本

       """

       if (not"userId"indic):

           dic["userId"] =""

       new_list= []

       foriinself.run_sort(dic.keys()):

           new_list.append(f"{i}={dic[i]}")

       returnself.get_md5("&".join(new_list))

获取指定城市所有站点数据

   defget_SearchStation(self, k, v):

       """

       获取指定城市所有站点数据

       """

       # 提取城市经纬度

       center=v['districts'][0]['center']

       lng=center.split(',')[0]  # 经度

       lat=center.split(',')[1]  # 维度

       CityCode=v['districts'][0]['adcode']  # 城市代码

       _time=self.get_time()  # 时间戳

       page=1

       whileTrue:

           data= {

               "stubGroupTypes": "0",

               "currentLat": lat,  # 当前坐标经度

               "orderType": "1",

               "orCityCode": CityCode,  # 城市代码

               "lng": lng,  # 城市坐标维度

               "pagecount": "50",

               "currentLng": lng,  # 当前坐标维度

               "page": page,

               "radius": "10000",

               "lat": lat,  # 城市坐标经度

               "showPromoteLabel": "1"

           }

           X_Ca_Signature=self.get_X_Ca_Signature(data, _time)

           headers= {

               'appVersion': '7.9.1.1',

               'X-Ca-Timestamp': _time,

               'X-Ca-Signature': X_Ca_Signature,

               'Connection': 'Keep-Alive',

               'User-Agent': 'okhttp/3.12.1',

           }

           # res = requests.post(url=url, data=data, headers=headers, proxies=self.proxies, verify=True, allow_redirects=True, timeout=60)

           res=self._parse_url(url=url, data=data, headers=headers)

           # print(res.text)

           ifnotres.textorres.status_code!=200:

               logger.info(f'{k}{page}页数据获取失败')

               return

           ifnotres.json().get('data'):

               logger.info(f'{k} 数据获取完成')

               return

           new_path='数据'+os.sep+k

           ifnotos.path.exists(new_path):

               os.makedirs(new_path)

           filename=new_path+os.sep+'站点列表.json'

           # 多页的情况直接把新数据添加至已有文件

           ifos.path.exists(filename):

               withopen(filename, 'r+', encoding='utf-8') asf:

                   row_data=json.load(f)

                   row_data['data'] +=res.json().get('data')

                   withopen(filename, 'w', encoding='utf-8') asf1:

                       json.dump(row_data, f1, ensure_ascii=False)

           else:

               withopen(filename, 'w', encoding='utf-8') asf:

                   # ensure_ascii 不适用ascii编码 解决不能显示中文问题

                   json.dump(res.json(), f, ensure_ascii=False)

           logger.info(f'{k}{page}页数据获取成功')

           page+=1

获取站点详情信息

       defget_detail(self, stationId, name, lat, lng):

       """

       获取站点详情

       """

       _time=self.get_time()  # 时间戳

       nonce=self.get_nonce()  # nonce参数

       test_= {

           "id": stationId,

           "gisType": "1",

           "lat": lat,

           "lng": lng,

           "stubType": "0",

           "versionFlag": "1",

           "nonce": nonce,

           "timestamp": _time

       }

       get_signtrue=self.get_signtrue(test_)

       headers= {

           "referrer": "web",

           "Accept": "application/json, text/plain, */*",

           "timestamp": _time,

           "signature": get_signtrue,

           "User-Agent": "Mozilla/5.0 (Linux; Android 8.1.0; Nexus 5X Build/OPM7.181205.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.98 Mobile Safari/537.36",

           "appVersion": "7.9.0",

           "Accept-Language": "zh-CN,en-CA;q=0.8,en-US;q=0.6",

       }

       params= {

           "id": stationId,

           "gisType": "1",

           "lat": lat,

           "lng": lng,

           "stubType": "0",

           "versionFlag": "1",

           "nonce": nonce,

       }

       response=requests.get(url, headers=headers, params=params)

       print(response.text)

       ifnotresponse.textorresponse.status_code!=200:

           logger.info(f'{name} 数据获取失败')

           return

       ifnotresponse.json().get('data'):

           logger.info(f'{name} 数据获取完成')

           return

       returnresponse.json()

效果

资源下载

https://download.csdn.net/download/qq_38154948/87484473


本文仅供学习交流使用,如侵立删!


相关文章
|
20天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
2月前
|
数据采集 存储 XML
给你一个具体的网站,你会如何设计爬虫来抓取数据?
【2月更文挑战第23天】【2月更文挑战第75篇】给你一个具体的网站,你会如何设计爬虫来抓取数据?
|
2月前
|
数据采集 存储 XML
深入浅出:基于Python的网络数据爬虫开发指南
【2月更文挑战第23天】 在数字时代,数据已成为新的石油。企业和个人都寻求通过各种手段获取互联网上的宝贵信息。本文将深入探讨网络爬虫的构建与优化,一种自动化工具,用于从网页上抓取并提取大量数据。我们将重点介绍Python语言中的相关库和技术,以及如何高效、合法地收集网络数据。文章不仅为初学者提供入门指导,也为有经验的开发者提供进阶技巧,确保读者能够在遵守网络伦理和法规的前提下,充分利用网络数据资源。
|
3月前
|
数据采集 数据可视化 数据挖掘
Python爬虫实战:抓取网站数据并生成报表
本文将介绍如何使用Python编写简单而高效的网络爬虫,从指定的网站上抓取数据,并利用数据分析库生成可视化报表。通过学习本文内容,读者将能够掌握基本的爬虫技术和数据处理方法,为日后开发更复杂的数据采集与分析工具打下坚实基础。
|
3月前
|
数据采集 存储 架构师
上进计划 | Python爬虫经典实战项目——电商数据爬取!
在如今这个网购风云从不间歇的时代,购物狂欢持续不断,一年一度的“6.18年中大促”、“11.11购物节”等等成为了网购电商平台的盛宴。在买买买的同时,“如何省钱?”成为了大家最关心的问题。 比价、返利、优惠券都是消费者在网购时的刚需,但在这些“优惠”背后已产生灰色地带。
|
13天前
|
数据采集 XML 数据挖掘
使用Python打造爬虫程序之HTML解析大揭秘:轻松提取网页数据
【4月更文挑战第19天】本文介绍了HTML解析在爬虫技术中的重要性,并通过Python的BeautifulSoup库展示了如何解析和提取数据。文章涵盖了HTML文档结构、使用BeautifulSoup的基本方法,如`find_all()`、选择器(标签、类、ID选择器)以及提取文本、属性和链接。此外,还讨论了遍历和处理嵌套元素的技巧。
|
2月前
|
数据采集 JavaScript 前端开发
给我举几个爬虫抓取数据时遇到错误的例子。
【2月更文挑战第23天】【2月更文挑战第76篇】给我举几个爬虫抓取数据时遇到错误的例子。
|
2月前
|
数据采集 存储 数据挖掘
Python爬虫实战:打造一个简单的新闻网站数据爬取工具
本文将介绍如何运用Python编写一个简单而高效的网络爬虫,帮助您在实际项目中快速获取并存储新闻网站的数据。通过学习本文,您将了解到如何利用Python中的第三方库和技术来实现数据爬取,为您的数据分析和应用提供更多可能性。
|
2月前
|
数据采集 存储 监控
Python爬虫实战:利用BeautifulSoup解析网页数据
在网络信息爆炸的时代,如何快速高效地获取所需数据成为许多开发者关注的焦点。本文将介绍如何使用Python中的BeautifulSoup库来解析网页数据,帮助你轻松实现数据抓取与处理的技术。
|
3月前
|
数据采集 前端开发 JavaScript
Python爬虫之Ajax数据爬取基本原理#6
Ajax数据爬取原理【2月更文挑战第19天】
33 1
Python爬虫之Ajax数据爬取基本原理#6