星星充电 充电桩数据爬虫

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

某星充电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


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


相关文章
|
16天前
|
数据采集 存储 监控
网络爬虫的最佳实践:结合 set_time_limit() 与 setTrafficLimit() 抓取云盘数据
本文探讨了如何利用 PHP 的 `set_time_limit()` 与爬虫工具的 `setTrafficLimit()` 方法,结合多线程和代理 IP 技术,高效稳定地抓取百度云盘的公开资源。通过设置脚本执行时间和流量限制,使用多线程提高抓取效率,并通过代理 IP 防止 IP 封禁,确保长时间稳定运行。文章还提供了示例代码,展示了如何具体实现这一过程,并加入了数据分类统计功能以监控抓取效果。
52 16
网络爬虫的最佳实践:结合 set_time_limit() 与 setTrafficLimit() 抓取云盘数据
|
3天前
|
数据采集 数据挖掘 数据处理
Python中实现简单爬虫并处理数据
【9月更文挑战第31天】本文将引导读者理解如何通过Python创建一个简单的网络爬虫,并展示如何处理爬取的数据。我们将讨论爬虫的基本原理、使用requests和BeautifulSoup库进行网页抓取的方法,以及如何使用pandas对数据进行清洗和分析。文章旨在为初学者提供一个易于理解的实践指南,帮助他们快速掌握网络数据抓取的基本技能。
15 3
|
7天前
|
数据采集 Python
天天基金数据的Python爬虫
天天基金数据的Python爬虫
24 3
|
10天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
7天前
|
数据采集 JSON 数据格式
Python:南京地铁每日客流数据的爬虫实现
Python:南京地铁每日客流数据的爬虫实现
19 1
|
7天前
|
数据采集 Python
爬虫练手:某网图书畅销榜排名数据
爬虫练手:某网图书畅销榜排名数据
18 0
|
1月前
|
数据采集 JavaScript 前端开发
构建简易Python爬虫:抓取网页数据入门指南
【8月更文挑战第31天】在数字信息的时代,数据抓取成为获取网络资源的重要手段。本文将引导你通过Python编写一个简单的网页爬虫,从零基础到实现数据抓取的全过程。我们将一起探索如何利用Python的requests库进行网络请求,使用BeautifulSoup库解析HTML文档,并最终提取出有价值的数据。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你打开数据抓取的大门。
|
2月前
|
数据采集 存储 数据库
Python中实现简单爬虫与数据解析
【8月更文挑战第31天】在数字化时代的浪潮中,数据成为了新的石油。本文将带领读者通过Python编程语言,从零开始构建一个简单的网络爬虫,并展示如何对爬取的数据进行解析和处理。我们将一起探索请求网站、解析HTML以及存储数据的基础知识,让每个人都能成为自己数据故事的讲述者。
|
2月前
|
数据采集 JavaScript 前端开发
构建你的第一个Python爬虫:抓取网页数据入门指南
【8月更文挑战第31天】在数字时代,数据是新的石油。本文将引导初学者通过简单的步骤,使用Python编程语言创建一个基础的网络爬虫程序。我们将探索如何从网络上提取信息,并理解背后的原理。无论你是编程新手还是想要扩展你的技术工具箱,这篇文章都将为你提供一条清晰的道路,让你学会编写能够自动获取网络数据的脚本。准备好开始你的网络数据抓取之旅了吗?让我们现在就开始吧!
|
2月前
|
数据采集 JavaScript 前端开发
Python 爬虫实战:抓取和解析网页数据
【8月更文挑战第31天】本文将引导你通过Python编写一个简单的网络爬虫,从网页中抓取并解析数据。我们将使用requests库获取网页内容,然后利用BeautifulSoup进行解析。通过本教程,你不仅能够学习到如何自动化地从网站收集信息,还能理解数据处理的基本概念。无论你是编程新手还是希望扩展你的技术工具箱,这篇文章都将为你提供有价值的见解。
下一篇
无影云桌面