okhttp post json 数据_使用python抓取App数据

App中的数据可以用网络爬虫抓取么

答案是完全肯定的:凡是可以看到的APP数据都可以抓取。

下面我就介绍下自己的学习经验和一些方法吧 本篇适合有过web爬虫基础的程序猿看

没有的的话学的可能会吃力一些

App接口爬取数据过程

  • 使用抓包工具
  • 手机使用代理,app所有请求通过抓包工具
  • 获得接口,分析接口
  • 反编译apk获取key
  • 突破反爬限制

需要的工具:

  • 夜神模拟器
  • Fiddler
  • Pycharm

实现过程

首先下载夜神模拟器模拟手机也可以用真机,然后下载Fiddler抓取手机APP数据包,分析接口完成以后使用Python实现爬虫程序

Fiddler安装配置过程

第一步:下载神器Fiddler

Fiddler下载完成之后,傻瓜式的安装一下!

第二步:设置Fiddler

打开Fiddler, Tools-> Fiddler Options (配置完后记得要重启Fiddler)

选中"Decrpt HTTPS traffic", Fiddler就可以截获HTTPS请求

选中"Allow remote computers to connect". 是允许别的机器把HTTP/HTTPS请求发送到Fiddler上来

d4566b0aeec3aa29c5ccff44071fb487.png

c4b332efbd95c74de72af6538e89b988.png

记住这个端口号是:8888

夜神模拟器安装配置过程

第一步:下载安装

  • 夜神模拟器下载完成之后,傻瓜式的安装一下!

第二步:配置桥接 实现互通

  • 首先将当前手机网络桥接到本电脑网络 实现互通

822f22f8bdb035ed281f7ca1ba767de7.png

fd31c5ba0433e06e94951c0a675c75e7.png

安装完成桥接驱动后配置IP地址,要配成和本机互通的网段,配置完成后打开主机cmd终端ping通ok

第三步:配置代理

  1. 打开主机cmd

5fa56a6fc85b65e3ca800bb4558f80ea.png

2、输入ipconfig查看本机IP

820ec286c9ef5a1647df8414cf8a409d.png

3、配置代理

进入夜神模拟器–打开设置–打开WLAN

8d3b30ac2306b7f76d137b95c3d8dd5a.png

点击修改网络–配置代理 如下图:

35b4d5892c7703c4aca36565472fd044.png

配置完后保存

到这里我们就设置好所有的值,下面就来测试一下,打开手机的超级课程表APP

8cc9bab89783eb51f87f5878c8f8abfc.png

4、在夜神模拟器上下载你想爬取得App使用Fiddler抓包分析api后使用python进行爬取就可以了

爬取充电网APP实例

爬取部分内容截图:

17c3bcb3ee213a97fa4c23b9ef79b126.png

部分python代码分享:

import requests
import city
import json
import jsonpath
import re
'''
更多Python学习资料以及源码教程资料,可以加群821460695 免费获取
'''
city_list = city.jsons
tags_list = city.Tagdef city_func(city_id):try:city = jsonpath.jsonpath(city_list, '$..sub[?(@.code=={})]'.format(int(city_id)))[0]["name"]except:city = jsonpath.jsonpath(city_list, '$[?(@.code=={})]'.format(int(city_id)))[0]["name"]return citydef tags_func(tags_id):tags_join = []if tags_id:for tags in tags_id:t = jsonpath.jsonpath(tags_list,'$..spotFilterTags[?(@.id=={})]'.format(int(tags)))tags_join.append(t[0]["title"])return ('-'.join(tags_join))def split_n(ags):return re.sub('n','  ',ags)def request(page):print('开始下载第%d页'%page)url = 'https://app-api.chargerlink.com/spot/searchSpot'two_url = "https://app-api.chargerlink.com/spot/getSpotDetail?spotId={d}"head = {"device": "client=android&cityName=%E5%8C%97%E4%BA%AC%E5%B8%82&cityCode=110106&lng=116.32154281224254&device_id=8A261C9D60ACEBDED7CD3706C92DD68E&ver=3.7.7&lat=39.895024107858724&network=WIFI&os_version=19","appId": "20171010","timestamp": "1532342711477","signature": "36daaa33e7b0d5d29ac9c64a2ce6c4cf","forcecheck": "1","Content-Type": "application/x-www-form-urlencoded","Content-Length": "68","Host": "app-api.chargerlink.com","Connection": "Keep-Alive","User-Agent": "okhttp/3.2.0"}data = {"userFilter[operateType]": 2,"cityCode": 110000,"sort": 1,"page": page,"limit": 10,}response = requests.post(url,data=data,headers=head)#获取数据data = response.json()for i in data['data']:c = []id = i['id']name = i["name"] #充电桩名phone = i["phone"] #手机号num = i['quantity'] #有几个充电桩city = city_func(i["provinceCode"]) #城市tags =tags_func(i["tags"].split(','))#标签message = c + [id,name,phone,num,city,tags]parse_info(two_url.format(d=id),message)def parse_info(url,message):#打开文件with open('car.csv','a',encoding='utf-8')as c:head = {"device": "client=android&cityName=&cityCode=&lng=116.32154281224254&device_id=8A261C9D60ACEBDED7CD3706C92DD68E&ver=3.7.7&lat=39.895024107858724&network=WIFI&os_version=19","TOKEN": "036c8e24266c9089db50899287a99e65dc3bf95f","appId": "20171010","timestamp": "1532357165598","signature": "734ecec249f86193d6e54449ec5e8ff6","forcecheck": "1","Host": "app-api.chargerlink.com","Connection": "Keep-Alive","User-Agent": "okhttp/3.2.0",}#发起详情请求res = requests.get(url,headers=head)price = split_n(jsonpath.jsonpath(json.loads(res.text),'$..chargingFeeDesc')[0]) #价钱payType = jsonpath.jsonpath(json.loads(res.text),'$..payTypeDesc')[0] #支付方式businessTime =split_n(jsonpath.jsonpath(json.loads(res.text),'$..businessTime')[0]) #营业时间result = (message + [price,payType,businessTime])r = ','.join([str(i) for i in result])+',n'c.write(r)def get_page():url = 'https://app-api.chargerlink.com/spot/searchSpot'head = {"device": "client=android&cityName=%E5%8C%97%E4%BA%AC%E5%B8%82&cityCode=110106&lng=116.32154281224254&device_id=8A261C9D60ACEBDED7CD3706C92DD68E&ver=3.7.7&lat=39.895024107858724&network=WIFI&os_version=19","appId": "20171010","timestamp": "1532342711477","signature": "36daaa33e7b0d5d29ac9c64a2ce6c4cf","forcecheck": "1","Content-Type": "application/x-www-form-urlencoded","Content-Length": "68","Host": "app-api.chargerlink.com","Connection": "Keep-Alive","User-Agent": "okhttp/3.2.0"}data = {"userFilter[operateType]": 2,"cityCode": 110000,"sort": 1,"page": 1,"limit": 10,}response = requests.post(url, data=data, headers=head)# 获取数据data = response.json()total = (data["pager"]["total"])page_Size = (data["pager"]["pageSize"])totalPage = (data['pager']["totalPage"])print('当前共有{total}个充电桩,每页展示{page_Size}个,共{totalPage}页'.format(total=total,page_Size=page_Size,totalPage=totalPage))
if __name__ == '__main__':get_page()start = int(input("亲,请输入您要获取的开始页:"))end = int(input("亲,请输入您要获取的结束页:"))for  i in range(start,end+1):request(i)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS的typeof力所能及已经力所不及

typeof返回值列表 typeof的作用 返回参数的类型 typeof能判断的类型 String类型: typeof a stringUndefined类型: typeof undefined undefinedBoolean类型: typeof true booleanNumber类型: typeof 22 numberSymbol类型: typeof Symbol() symbolFunction类型:typeof funct…

忆阻器类脑芯片与人工智能

来源:文章转载自期刊《微纳电子与智能制造》作者:陈子龙,程传同,董毅博,张 欢,张恒杰,毛旭瑞,黄北举,谢谢。摘 要现阶段计算与存储分离的“冯诺依曼”体系在功耗和速率方…

linux系统下替换图片,Linux(ubuntu系统)下使用FreeImage库

Linux(ubuntu系统)下使用FreeImage库Linux(ubuntu系统)下使用FreeImage库最近在搞一个图像处理的项目,需要用到FreeImage,之前在Windows下用过,很简单,因为FreeImage官网提供了可供使用的静态库动态库,直接包含就行了。…

UWP Composition API - PullToRefresh

UWP Composition API - PullToRefresh 原文:UWP Composition API - PullToRefresh背景: 之前用ScrollViewer 来做过 PullToRefresh的控件,在项目一些特殊的条件下总有一些问题,比如ScrollViewer不会及时到达指定位置。于是便有了使用Composit…

从城市治理到城市“智”理,AI 不仅是城市管理的“眼睛”

来源:帮尼资讯部分参考来源:中国安防行业网,图片来源网络近年来,随着计算机视觉技术的长足进步,AI在城市管理领域广泛部署。其中,AI视频分析识别技术成为城市场景中规模最大、数量最多、落地最广泛的应用。…

python3 应用 nose_parameterized 实现unittest 参数化

一、读取变量的值,实现unittest 参数化 import nose_parameterized,unittestdef calc(a:int,b:int):return ab case_data [[10,20,30],[12,21,33],[15,21,36] ] class MyClass(unittest.TestCase):nose_parameterized.parameterized.expand(case_data)def test_comp…

vue data数据修改_VUE的数据响应式

什么是数据响应式?const vm newVUE({data:{n:0}})上面的代码中,如果修改vm.n,那么UI中的n就会通过变化来响应我,这就是数据响应式。VUE对data做了什么?当给一个vue实例传入data的时候,vue内部会对传入的dat…

hutool的定时任务不支持依赖注入怎么办_设计一个任务调度算法,时间轮算法,比优先队列更高效...

当年我还是个学生的时候,有一次去参加欢聚时代的一个面试,有一道面试题记忆尤新,让你来实现一个定时任务,你会怎么做?为了简化问题,我们只用考虑内存方案,不用考虑数据持久化。数组法最简单的&a…

蜂鸟开发板 linux,蜂鸟E203系列——Linux下运行hello world例程

创建程序在 ~/hbird-e-sdk-master/software 路径下创建一个“helloworld”中文件夹在 ~/hbird-e-sdk-master/software/helloworld 路径下创建文件“helloworld.c”内容如下:#includeint main(void){printf("hello world!");printf(…

全景解密量子信息技术:高层集中学习,国家战略,三大领域一文看懂

来源:智东西 内参来源:中国信通院 IPRdaily中文网10月16日下午,高层就量子科技研究相关前景举行了一次会议,强调当今世界正经历百年未有之大变局,科技创新是其中一个关键变量。要充分认识推动量子科技发展的重要性&am…

mac怎么查看gitlab的注册邮箱_163电子邮箱怎么注册申请?手机号注册电子邮箱的小技巧...

电子邮箱帮助我们实现了无纸化,无需手写信件,通过电脑、手机输入,即可与收件人在网络上进行联系。电子邮箱的兴起,对于人与人之间的沟通和交流,增加了便捷性,促进了社会的发展与进步。目前的邮箱中&#xf…

c语言 switch案例,c语言switch case语句使用例子

c语言switch case语句使用例子发布时间:2020-04-23 11:48:53来源:亿速云阅读:421作者:小新这篇文章主要为大家详细介绍了c语言switch case语句使用例子,文中示例代码介绍的非常详细,具有一定的参考价值&…

深度学习未来的三种方式

来源:海豚数据科学实验室深度学习的未来在于这三种学习模式,而且它们彼此之间密切相关:混合学习——现代深度学习方法如何跨越监督学习和非监督学习之间的边界,以适应大量未使用的无标签数据?复合学习——如何以创造性…

android ocr识别源码_身份证识别OCR解决手动输入繁琐问题

随着互联网金融的的发展,越来越多的互联网金融公司都推出了自己的金融APP,这些APP都涉及到个人身份证信息的输入认证,如果手动去输入身份证号码和姓名,速度非常慢,且用户体验非常差。为了提高在手机移动终端上输入身份…

什么是内卷?华为内部这篇文章读懂

来源:互联网坊间八卦(ID:kekesil)内卷的意思是明明已经靠近边界有个天花板,但却又不断自我激发,繁复化、精致化。概念的含糊其辞是无效讨论和跌入焦虑自我再生产困境的原因之一。判断内卷还是良性竞争的前置问题是回答…

锁屏界面显示某些设置已隐藏_iOS 14 隐藏功能,只要轻点手机背面就能截屏

关于 iOS 14 系统的一些功能我也为大家介绍了一些,iOS 14 已发布,界面大更新!其实除了之外,iOS 14 系统还有许多隐藏的功能。那么今天我就为大家介绍 iOS 14 系统的隐藏功能之一:轻点背面。话不多说,我们先…

分享丨强化学习是针对优化数据的监督学习?

来源:AI科技大本营作者 | Ben Eysenbach、Aviral Kumar、Abhishek Gupta 编译 | 凯隐出品 | AI科技大本营(ID:rgznai100)强化学习(RL)可以从两个不同的视角来看待:优化和动态规划。其中,诸如REI…

stm32l0的停止模式怎么唤醒_手把手教你怎么利用旧电脑搭建NAS组建自己的黑群晖...

手把手教你怎么利用旧电脑搭建NAS组建自己的黑群晖Synology群晖科技(Synology )创立于 2000 年,自始便专注于打造高效能、可靠、功能丰富且绿色环保的 NAS 服务器,是全球少数几家以单纯的提供网络存储解决方案获得世界认同的华人企…

有人说 GPT3 是“暴力美学”的结晶,它的工作原理你知道吗?| 动图详解

来源:CSDN如今,在科技领域掀起了一股GPT3的热潮。大规模语言模型(比如GPT3)的潜力惊艳了我们。虽然这些模型还没有成熟到大多数企业将之直接面对消费者,但却展示出一些智慧的火花,并让人坚信其将会加速自动…

git 生成ssh key_ubuntu git生成ssh key (公钥私钥)配置github或者码云

Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置。github的SSH配置如下:设置Git的user name和email:git config --global user.name "xx"git config --global user.email &qu…