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上来 
 
 
记住这个端口号是:8888   可以更改  在电脑浏览器中输入地址:http://localhost:8888/,点击FiddlerRoot certificate,下载安全证书:

安全证书安装

证书是需要在手机上进行安装的,这样在电脑Fiddler软件抓包的时候,手机使用电脑的网卡上网才不会报错。

将下载好的FiddlerRoot.cer安装证书拷贝到手机中,然后进行证书安装,设置(Settings)->(系统和设备中的)更多设置->系统安全->从存储设备安装:

然后找到拷贝的FiddlerRoot.cer进行安装即可。安装好之后,可以在信任的凭证中找到我们已经安装好的安全证书,在用户中可以看到证书如下:

4 局域网设置

想要使用Fiddler进行手机抓包,首先要确保手机和电脑的网络在一个内网中,可以使用让电脑和手机都连接同一个路由器。当然,也可以让电脑开放WIFI热点,手机连入。这里,我使用的方法是,让手机和电脑同时连入一个路由器中。最后,让手机使用电脑的代理IP进行上网。

首先,查看电脑的IP地址,在cmd中使用命令ipconfig查看电脑IP地址。找到无线局域网WLAN的IPv4地址,记下此地址。

在手机上,点击连接的WIFI进行网络修改,添加代理。进行手动设置,主机名即为上图中找到的IP地址,端口号即为Fiddler设置中的端口号8888:

夜神模拟器安装配置过程

第一步:下载安装

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

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

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


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

第三步:配置代理

  1. 打开主机cmd 
  2. 输入ipconfig查看本机IP 
  3. 配置代理 
    进入夜神模拟器–打开设置–打开WLAN 
     
    点击修改网络–配置代理 如下图: 

    配置完后保存 
    到这里我们就设置好所有的值,下面就来测试一下,打开手机的超级课程表APP 
  4. 在夜神模拟器上下载你想爬取得App使用Fiddler抓包分析api后使用python进行爬取就可以了

爬取充电网APP实例

爬取部分内容截图: 

部分python代码分享:

import requests
import city
import json
import jsonpath
import recity_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)

总结:

app里的数据比web端更容易抓取,反爬虫也没拿么强,大部分也都是http/https协议,返回的数据类型大多数为json

扫码获取关注学习资源

Lemocms 后台管理系统 基于tp6(thinkphp) easywechat4.* layui 开发的后台管理系统 集成微信管理功能 五星推荐

python3 pycharm 抓取app 上的数据相关推荐

  1. 手机抓包app_Python爬取网站上面的数据很简单,但是如何爬取APP上面的数据呢

    前言 在我们在爬取手机APP上面的数据的时候,都会借助Fidder来爬取.今天就教大家如何爬取手机APP上面的数据. 环境配置 1.Fidder的安装和配置 下载Fidder软件地址:https:// ...

  2. Python爬取网站上面的数据很简单,但是如何爬取APP上面的数据呢

    前言 在我们在爬取手机APP上面的数据的时候,都会借助Fidder来爬取.今天就教大家如何爬取手机APP上面的数据. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过 ...

  3. 利用Python爬取爬取APP上面的数据

    ​ 前言 在我们在爬取手机APP上面的数据的时候,都会借助Fidder来爬取.今天就教大家如何爬取手机APP上面的数据. 环境配置 1.Fidder的安装和配置 下载Fidder软件地址:https: ...

  4. python爬取软件数据_利用Python爬取爬取APP上面的数据

    前言 在我们在爬取手机APP上面的数据的时候,都会借助Fidder来爬取.今天就教大家如何爬取手机APP上面的数据. 环境配置 1.Fidder的安装和配置 下载Fidder软件地址:https:// ...

  5. Python爬取APP上的数据教程

    App抓包原理 1.客户端向服务器发起HTTPS请求 2.抓包工具拦截客户端的请求,伪装成客户端向服务器进行请求 3.服务器向客户端(实际上是抓包工具)返回服务器的CA证书 4.抓包工具拦截服务器的响 ...

  6. stata抓取html,(5)详解 stata 爬虫抓取网页上的数据 part 1

    *案例:抓取 http://www.tjcn.org 中国统计信息网上前50页(每页包含20个市的数据)的1000个地区的GDP数据.使用stata版本为 stata13,与12版本和14版本都不兼容 ...

  7. php中取页面的值_php如何抓取网页上的数据

    php中抓取网页内容的实例详解 方法一:使用file_get_contents方法实现$url = "http://news.sina.com.cn/c/nd/2016-10-23/doc- ...

  8. charles抓取微信小程序数据(抓取http和https数据)

    本文中使用的是mac上的抓包工具charles进行抓包,手机是华为荣耀8,安卓版本7.0(其实跟版本没啥关系) 要想抓取到微信小程序的数据首先要解决的第一个问题件就是如何 通过charles抓取手机上 ...

  9. Python3.x+Fiddler抓取APP数据

    随着移动互联网的市场份额逐步扩大,手机APP已经占据我们的生活,以往的数据分析都借助于爬虫爬取网页数据进行分析,但是新兴的产品有的只有APP,并没有网页端这对于想要提取数据的我们就遇到了些问题,本章以 ...

最新文章

  1. OpenCV+python:Canny边缘检测算法
  2. 第二十一课.GBDT
  3. 自定义一个安全的rm指令
  4. 3—YOLO:训练自己的数据
  5. Firefox常用插件
  6. ACM:回溯,八皇后问题,素数环
  7. 前端学习(1420):ajax的post请求
  8. Kubernetes如何赋能可再生能源产业提升10倍效率
  9. Windows Phone 7 立体旋转动画的实现
  10. 04-----赋值运算符
  11. 启动项目无法打印日志处理及logback简单使用
  12. 华中农业大学C语言实验5答案,物理实验报告册(上册)-华中农业大学实验.pdf
  13. 公式编辑器里面添加空格
  14. 项目实战第一讲:如何优雅地记录操作日志
  15. 仿淘宝,京东红包雨(基于Phaser框架)
  16. Echarts title和subtitle进行合并显示
  17. Frequency bin
  18. u3d联机斗地主(1):出牌规则
  19. 从0开始,利用docker搭建一套大数据开发环境(一)
  20. 名帖329 王羲之 草书《游目帖》

热门文章

  1. 天线远场定义_天线场区划分的定义
  2. GitHub快速学习-一
  3. 新加坡以人为本的交通设计理念与交通组织视野
  4. 《R语言数据挖掘》读书笔记:三、分类
  5. 帖子:刚刚结束美国J1签证所需的英语熟练度面试
  6. 第十二章:email-mailbox:管理email归档-imaplib:IMAP4客户库-变种
  7. zigbee3.0 ota 实验
  8. excel表格锁定怎么解锁_让用户锁定或解锁Excel工作簿
  9. 哪个选项不是python文件打开的合法模式组合_下面代码的输出结果是( ):
  10. WGCLOUD——如何统计用户的日活(dau)、月活(mau)数据