-
-
[原创]Python 懂车帝全车系销量排行榜
-
发表于: 2022-4-4 23:50 4494
-
<table><tr><td bgcolor=orange>本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!</td></tr></table>
Python 懂车帝全车系销量排行榜
需求
1 2 3 | 车系 ID 城市 时间段 车系名称 销量 4363 深圳 2022 年 2 月 Model Y 1 , 224 分城市榜单,所有城市热销榜,拉到底部获取全部车系数据 |
操作环境
- win10
- Google nexus5x(root)
- Python3.9
- Charles
需求分析
既然需要所有城市的热销榜,那么第一步需要先拿到全国城市列表
先来web端试下能否找到需要的数据接口,打开页面F12查看Network
根据页面关键词搜索没有找到明显的数据接口,虽然说现在也可以使用request或者selenium直接在页面解析数据,但是毕竟这不是首选方案,还是从APP分析一下在决定用什么方案。
PS:手机环境、抓包环境的配置在这不在赘述,有兴趣的可参考之前的文章 APP抓包环境配置
下载懂车帝APP,并安装至手机
手机开启Postern,pc打开charles
至此抓包工作准备完成,打开懂车帝APP,进入选择城市页面
还是老套路先根据页面关键词搜索一波
竟然没有需要的数据!不着急,多试几次,确定Charles抓到了所有的数据包,然后逐条分析一下,找到下图这个接口,看路径名猜测应该就是需要的数据接口,原来数据中中文经过了编码,难怪搜索不到,在线json解析看一下
分享一个常用的json数据在线解析网站
正是所需数据
全国城市列表接口:
1 | https: / / * * * * * * * * ?iid = 2467735824764398 &device_id = 40011211486215 &ac = wifi&channel = dcd - yd - 11zh - and - 74 &aid = 36 &app_name = automobile&version_code = 693 &version_name = 6.9 . 3 &device_platform = android&os = android&ab_client = a1 % 2Cc2 % 2Ce1 % 2Cf2 % 2Cg2 % 2Cf7 &ab_group = 3167590 % 2C3577236 % 2C3333988 &ssmix = a&device_type = Nexus + 5X &device_brand = google&language = zh&os_api = 27 &os_version = 8.1 . 0 &manifest_version_code = 693 &resolution = 1080 * 1794 &dpi = 420 &update_version_code = 6931 &_rticket = 1649079408626 &cdid = f3163204 - 7faf - 45d7 - 89c4 - e82215c3216c&city_name = % E8 % 81 % 8A % E5 % 9F % 8E &gps_city_name = % E8 % 81 % 8A % E5 % 9F % 8E &selected_city_name&rom_version = 27 &longi_lati_type = 1 &longi_lati_time = 1649079423941 &content_sort_mode = 0 &total_memory = 1.77 &cpu_name = Qualcomm + Technologies % 2C + Inc + MSM8992&overall_score = 4.873 &cpu_score = 4.8872 &host_abi = armeabi - v7a |
对!你没看错,就是这么长,验证一下数据接口,在网页中直接请求一下这个url
这儿推荐安装一个网页json可视化的插件,这儿偷懒没装,在线解析了一下json数据,和Charles抓到的数据是一样
城市热销榜数据接口就比较简单了,使用上面的方法很容易就能抓到数据接口,修改city_name参数和offset翻页即可
1 2 | https: / * * * * * * ?city_name = % E8 % A5 % BF % E5 % AE % 89 &count = 10 &offset = 10 &month = &new_energy_type = & rank_data_type = 64 &brand_id = &price = &manufacturer = &outter_detail_type = &nation = 0 |
获取全国城市列表
直接请求接口获取即可,这边使用了一个jsonpath模块用来提取json数据,很好用强烈推荐!
1 2 3 4 5 6 7 8 | def get_month( self ): """ 获取城市列表 """ response = self ._parse_url(url).json() # 提取json数据中所有的城市名 models = jsonpath(response, '$..city_name' ) return models |
获取指定城市热销榜
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def get_score( self , city_name): """ 获取指定城市热销榜 city_name: 城市名 """ offset = 0 while True : response = self ._parse_url(url).json() tag_list = response.get( 'data' ).get( 'list' ) # 没有数据跳出 if not tag_list: return for tag in tag_list: series_id = tag.get( 'series_id' ) # 车系ID series_name = tag.get( 'series_name' ) # 车系名称 count = tag.get( 'count' ) # 车系销量 yield series_id, series_name, count # 翻页参数 offset + = 100 |
运行效果
资源下载
https://download.csdn.net/download/qq_38154948/85077866
<table><tr><td bgcolor=orange>本文仅供学习交流使用,如侵立删!</td></tr></table>
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2022-4-6 23:38
被拉灯的小手编辑
,原因:
赞赏
看原图
赞赏
雪币:
留言: