基础工作:
爬取app数据_爬取app数据合法吗
爬取app数据_爬取app数据合法吗
内置元素选择器
序列化存储数据
处理cookie、HTTP些东西间件
爬取 Sap 或者 RSS
等等
我需求爬取 Google Play 市场所 App 页面链接及载数量
首先确保配置 Python 2.7, MongoDB 数据库, 及 Python pip 包管理系统
安装应 Python 包并且项目模板:
pip install scrapy scrapy-mongodb
scrapy startproject app
cd app
scrapy genspider google
app/spider/google.py 换面内容:
`# -- coding: utf-8 --
import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.linkextractors import LinkExtractor
from app.s import GoogleItem
class GoogleSpider(CrawlSpider):
name = "google"
allowed_domains = [""]
start_s = [
'',
''
]rules = [
Rule(LinkExtractor(allow=("", )), callback='parse_app',follow=True),
] # CrawlSpider 根据 rules 规则爬取页面并调用函数进行处理
def parse_app(self, response):
# 获取页面 URL 及载数量
= GoogleItem()
[''] = response.
['num'] = response.xpath("//div[@prop='numDownloads']").xpath("text()").extract()
yield
app/s 添加面代码:
class GoogleItem(scrapy.Item):
= scrapy.Field()
num = scrapy.Field()
app/setting.py 面添加面代码
# 配置 scrapy-mongodb 数据库连接用于自爬取数据存入 MongoDB
ITEM_PIPELINES = [
'scrapy_mongodb.MongoDBPipeline',
]MONGODB_URI = 'mongodb://127.0.0.1:27017'
MONGODB_DATABASE = 'scrapy'
MONGODB_COLLECTION = 'play'
没其工作连配置文件共四十行启 MongoDB项目目录运行
scrapy crawl google -s DIR=app/jobs
静静等跑完吧-s DIR=app/jobs 参数意思工作状态已经爬取页面数据存 app/jobs 目录即使间断运行面命令该目录恢复工作用重新始
我 Linode 低配 VPS 跑概 40 MongoDB 数据 156 万条记录2015 1 月 Google Play 143 万款 App, 相信已经爬取绝数 App 页面
`> use scrapy
switched to db scrapy
> db.play.count()
1564754
> db.play.find().limit(1)
"_id" : ObjectId("55479d9da28a7c1cca449c23"), "" : "", "num" : [ " 100,000,000 - 500,000,000 " ]()
>
首先爬虫分为爬取移动APP数据和网站数据,主要方法都是一致,但细节上有点区别。
拿爬取网站数据分析:
1.用浏览器开发者工具的Network功能分析对应的数据接口或者查看源代码写出相应的正则表达式去匹配相关数据
2.将步骤一分析出来的结果或者正则用脚本语言模拟请求,提取关键数据。这中间可能牵扯多个请求接口,而且一般要做数据签名以及数据加密,这一块需要找到对应js文件分析算法。
爬取一个网站数据大致就以上两步,当然细节还有很多,比如模拟请求头,请求方式以及请求体。如果你是爬取移动APP数据,那就还要牵扯抓包分析,软件砸壳反编译等等,相对来说APP爬虫要复杂一点。
基础工作:
内置元素选择器
序列化和存储数据
处理cookie、HTTP头这些东西的中间件
爬取 Sap 或者 RSS
等等
我的需求是爬取 Google Play 市场上的所有 App 的页面链接以及下载数量。
首先确保配置好 Python 2.7, MongoDB 数据库, 以及 Python 的 pip 包管理系统。
然后安装对应的 Python 包并且生成项目模板:
pip install scrapy scrapy-mongodb
scrapy startproject app
cd app
scrapy genspider google
然后把 app/spider/google.py 换成下面的内容:
`# -- coding: utf-8 --
import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.linkextractors import LinkExtractor
from app.s import GoogleItem
class GoogleSpider(CrawlSpider):
name = "google"
allowed_domains = [""]
start_s = [
Charles是一个网络抓包工具,我们可以用它来做App的抓包分析,得到App运行过程中发生的所有网络请求和响应内容,这就和Web端浏览器的开发者工具Network部分看到的结果一致。
相比Fiddler来说,Charles的功能更强大,而且跨平台支持更好。所以我们选用Charles作为主要的移动端抓包工具,用于分析移动App的数据包,辅助完成App数据抓取工作。
一、本节目标
本节我们以京东App为例,通过Charles抓取App运行过程中的网络数据包,然后查看具体的Request和Response内容,以此来了解Charles的用法。
二、准备工作
请确保已经正确安装Charles并开启了服务,手机和Charles处于同一个局域网下,Charles和CharlesCA证书设置好。
三、原理
首先Charles运行在自己的PC上,Charles运行的时候会在PC的8888端口开启一个服务,这个服务实际上是一个HTTP/HTTPS的。
确保手机和PC在同一个局域网内,我们可以使用手机模拟器通过虚拟网络连接,也可以使用手机真机和PC通过网络连接。
设置手机为Charles的地址,这样手机访问互联网的数据包就会流经Charles,Charles再转发这些数据包到真实的,返回的数据包再由Charles转发回手机,Charles就起到中间人的作用,所有流量包都可以捕捉到,因此所有HTTP请求和响应都可以捕获到。同时Charles还有权力对请求和响应进行修改。
四、抓包
初始状态下Charles的运行界面如下图所示。
Charles会一直PC和手机发生的网络数据包,捕获到的数据包就会显示在左侧,随着时间的推移,捕获的数据包越来越多,左侧列表的内容也会越来越多。
可以看到,图中左侧显示了Charles抓取到的请求站点,我们点击任意一个条目便可以查看对应请求的详细信息,其中包括Request、Response等内容。
接下来清空Charles的抓取结果,点击左侧的扫帚按钮即可清空当前捕获到的所有请求。然后点击第二个按钮,确保按钮是打开的,这表示Charles正在App的网络数据流,如下图所示。
这时打开手机京东,注意一定要提前设置好Charles的并配置好CA证书,否则没有效果。
打开任意一个商品,如iPhone,然后打开它的商品评论页面,如下图示。
不断上拉加载评论,可以看到Charles捕获到这个过程中京东App内发生的所有网络请求,如下图所示。
左侧列表中会出现一个链接,而且它在不停闪动,很可能就是当前App发出的获取评论数据的请求被Charles捕获到了。我们点击将其展开,继续上拉刷新评论。随着上拉的进行,此处又会出现一个个网络请求记录,这时新出现的数据包请求确定就是获取评论的请求。
为了验证其正确性,我们点击查看其中一个条目的详情信息。切换到Contents选项卡,这时我们发现一些JSON数据,核对一下结果,结果有commentData字段,其内容和我们在App中看到的评论内容一致,如下图所示。
这时可以确定,此请求对应的接口就是获取商品评论的接口。这样我们就成功捕获到了在上拉刷新的过程中发生的请求和响应内容。
五、分析
现在分析一下这个请求和响应的详细信息。首先可以回到Overview选项卡,上方显示了请求的接口URL,接着是响应状态Status Code、请求方式Mod等,如下图所示。
这个结果和原本在Web端用浏览器开发者工具内捕获到的结果形式是类似的。
接下来点击Contents选项卡,查看该请求和响应的详情信息。
上半部分显示的是Request的信息,下半部分显示的是Response的信息。比如针对Reqeust,我们切换到Headers选项卡即可看到该Request的Headers信息,针对Response,我们切换到JSON TEXT选项卡即可看到该Response的Body信息,并且该内容已经被格式化,如下图所示。
由于这个请求是POST请求,我们还需要关心POST的表单信息,切换到Form选项卡即可查看,如下图所示。
这样我们就成功抓取App中的评论接口的请求和响应,并且可以查看Response返回的JSON数据。
至于其他App,我们同样可以使用这样的方式来分析。如果我们可以直接分析得到请求的URL和参数的规律,直接用程序模拟即可批量抓取。
六、重发
Charles还有一个强大功能,它可以将捕获到的请求加以修改并发送修改后的请求。点击上方的修改按钮,左侧列表就多了一个以编辑图标为开头的链接,这就代表此链接对应的请求正在被我们修改,如下图所示。
我们可以将Form中的某个字段移除,比如这里将partner字段移除,然后点击Remove。这时我们已经对原来请求携带的Form Data做了修改,然后点击下方的Execute按钮即可执行修改后的请求,如下图所示。
可以发现左侧列表再次出现了接口的请求结果,内容仍然不变,如下图所示。
删除Form表单中的partner字段并没有带来什么影响,所以这个字段是无关紧要的。
有了这个功能,我们就可以方便地使用Charles来做调试,可以通过修改参数、接口等来测试不同请求的响应状态,就可以知道哪些参数是必要的哪些是不必要的,以及参数分别有什么规律,得到一个最简单的接口和参数形式以供程序模拟调用使用。
七、结语
以上内容便是通过Charles抓包分析App请求的过程。通过Charles,我们成功抓取App中流经的网络数据包,捕获原始的数据,还可以修改原始请求和重新发起修改后的请求进行接口测试。
知道了请求和响应的具体信息,如果我们可以分析得到请求的URL和参数的规律,直接用程序模拟即可批量抓取!
手机爬虫非常有意思,而且可以爬取的数据非常多,当然还有很多东西要学。以后我也会写一些实战的有趣案例给大家。
Appium选择了/的设计模式,可以在OSX、Windows以及Linux系统上运行,支持Ruby、Python、Ja、PHP、C#、JaScript等语言的实现。
本教程以MacBook Pro通过Python程序控制Android系统的淘宝App为例,因为Appium依赖Android SDK,Android SDK需要Ja环境,所以所需环境如下:
pc端和移动端的连接有两种方式USB连接和连接
更多命令:教程
程序次运行的时候,会在手机安装3个app,一定要同意安装,只有Appium Settings在桌面有图标
Android SDK教程
Appium教程
Appium新手入门
日志采集。通过爬虫的方式常爬取的数据源主要来自这四类数据源包括,开放数据源、爬虫抓取、传感器和日志采集,开放数据源是针对行业的数据库。爬虫,即网络爬虫,也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理。
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。